【问题标题】:ld: fatal: file /usr/local/lib/libiconv.so: wrong ELF class: ELFCLASS32ld:致命:文件/usr/local/lib/libiconv.so:错误的ELF类:ELFCLASS32
【发布时间】:2021-02-12 19:43:07
【问题描述】:

我正在尝试在 Solaris sparc 10 上构建 PHP 7.4,但出现此错误:

d_objects.lo Zend/zend_object_handlers.lo Zend/zend_objects_API.lo Zend/zend_default_classes.lo Zend/zend_inheritance.lo Zend/zend_smart_str.lo Zend/zend_cpuinfo.lo Zend/zend_execute.lo sapi/apache2handler/mod_php7.lo sapi/ apache2handler/sapi_apache2.lo sapi/apache2handler/apache_config.lo sapi/apache2handler/php_functions.lo main/internal_functions.lo -lresolv -lrt -liconv -lintl -lrt -lm -lnsl -lsocket -lgcc -o libphp7.la ld:致命:文件/usr/local/lib/libiconv.so:错误的ELF类:ELFCLASS32 ld:致命:文件处理错误。没有输出写入 .libs/libphp7.so *** 错误代码 1 make:致命错误:目标“libphp7.la”的命令失败

我的配置如下:

./configure --disable-xmlwriter --disable-xmlreader --disable-simplexml --disable-xml --disable-dom --with-apxs2=/usr/apache2/bin/apxs --with-gd --with-zlib --disable-ipv6 --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-freetype-dir=/usr/local --without- pear --with-openssl --with-mysqli --enable-bcmath --enable-ctype --enable-mbstring --with-gettext --prefix=/usr/php --without-libxml OPENSSL_CFLAGS=-I/usr /include/openssl OPENSSL_LIBS=-L/usr/local/ssl/include SQLITE_CFLAGS=-I/usr/php/include/php/ext SQLITE_LIBS=-L/usr/php/include/php/ext ZLIB_CFLAGS=-I/usr /include ZLIB_LIBS=-L/usr/include ONIG_CFLAGS=-I/usr/local/include/php/ext/mbstring ONIG_LIBS=-L/local/include/php/ext/mbstring
--with-external-pcre
--with-pcre-jit
PCRE2_LIBS=-L/app/INSTALL_FILES/php-7.4.13/ext/pcre/pcre2lib
PCRE2_CFLAGS=-I/app/INSTALL_FILES/php-7.4.13/ext/pcre/pcre2lib
SQLITE_LIBS=-L/app/INSTALL_FILES/php-7.2.5/ext/sqlite3/libsqlite
SQLITE_CFLAGS=-I/app/INSTALL_FILES/php-7.2.5/ext/sqlite3/libsqlite

环境设置如下:

$ env|grep LD

LDFLAGS=-L/opt/csw/lib/gcc -L/usr/local/lib -R/opt/csw/lib/gcc

LD_LIBRARY_PATH_64=/opt/csw/lib/sparcv9:/usr/local/64/lib:/usr/sfw/lib/sparcv9

LD_LIBRARY_PATH=/opt/csw/bin/sparcv9:/opt/csw/lib/sparcv9:/usr/local/include/php/ext/sqlite3/libsqlite:/opt/csw/lib:/usr/local/ 64/lib:/usr/sfw/lib/sparcv9:/usr/apache2.2/pcre/lib:/usr/apache2.2/apr_util/lib:/usr/apache2.2/apr/lib

LD_LIBRARY_PATH_32=/usr/local/include/php/ext/sqlite3/libsqlite:/opt/csw/lib:/usr/apache2.2/pcre/lib:/usr/apache2.2/apr_util/lib:/ usr/apache2.2/apr/lib

任何帮助将不胜感激,在此先感谢:)

【问题讨论】:

  • 您是在构建 32 位还是 64 位版本?
  • 花点时间阅读帮助中心的editing help。 Stack Overflow 上的格式化与其他站点上的不同。您的帖子看起来越好,其他人就越容易阅读和理解它。

标签: php makefile solaris configure


【解决方案1】:

您正在构建具有以下环境变量集的 64 位可执行文件:

LD LDFLAGS=-L/opt/csw/lib/gcc -L/usr/local/lib -R/opt/csw/lib/gcc

鉴于此错误:

ld: fatal: file /usr/local/lib/libiconv.so: wrong ELF class: ELFCLASS32

共享对象/usr/local/lib/libiconv.so 是一个 32 位共享对象。

在构建或运行 64 位二进制文​​件时,您可以从 LD_* 环境变量中删除包含 32 位二进制文​​件的目录,或者确保任何这些目录的内容都是 32 位或 64 位如果您需要 /usr/local/lib 中的 64 位库。

您需要阅读ENVIRONMENT VARIABLES section of the Solaris 10 ld.so.1 man page

环境变量

可以使用_32_64 指定每个环境变量 后缀。这使得环境变量分别特定于 32 位或 64 位进程。此环境变量覆盖任何 可能位于的环境变量的非后缀版本 影响。没有值指定的环境变量,具有 _32 或 _64 后缀,有效取消任何关联的通用环境变量设置。

您混合了很多带有和不带有 _32_64 后缀的 LD_* 环境变量,您需要清理它们并保持一致,这样您就不会混合 32- 和 64 -bit 可执行文件。

这看起来完全错误:

ZLIB_LIBS=-L/usr/include

/usr/include中的库???

【讨论】:

  • 您好,非常感谢您的回复,这让我有一些工作要做!
猜你喜欢
  • 2011-05-09
  • 2011-09-04
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 2018-09-16
  • 2017-05-12
相关资源
最近更新 更多