我们目前在 Solaris 10 服务器上运行 PHP 5.2.13。我需要启用一些附加功能,因此我运行了配置脚本,但出现了一些错误。
我执行了“export CFLAGS="-m64"”以确保 GCC 在 64 位模式下编译,但我似乎没有 64 位版本的 libiconv.so。我尝试使用“--without-iconv”运行脚本,但没有成功。这是我的 config.log 的结尾:
configure:20017: checking for strftime
configure:20471: checking whether to enable LIBXML support
configure:20519: checking libxml2 install dir
configure:20548: checking for xml2-config path
configure:20706: checking whether libxml build works
configure:20733: gcc -o conftest -m64 -D_POSIX_PTHREAD_SEMANTICS -R/usr/ucblib -L/usr/ucblib -R/usr/local/lib/../lib/gcc/sparc-sun-solaris2.10/3.4.6 -L/usr/local/lib/../lib/gcc/sparc-sun-solaris2.10/3.4.6 -R/usr/local/lib -L/usr/local/lib conftest.c
-lrt -lresolv -lm -lnsl -lsocket -lgcc -lxml2 -lz -liconv -lm -lsocket -lnsl 1>&5
ld: fatal: file /usr/local/lib/libiconv.so: wrong ELF class: ELFCLASS32
ld: fatal: File processing errors. No output written to conftest
collect2: ld returned 1 exit status
configure: failed program was:
#line 20722 "configure"
#include "confdefs.h"
char xmlInitParser();
int main() {
xmlInitParser();
return 0;
}
有什么办法可以解决这个问题吗?从昨天开始我就一直在为此绞尽脑汁。如果有帮助的话,这是我的配置行:
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/lib --with-libxml-dir=/usr/local --with-zlib=/usr/local --with-xpm-dir=/usr/local --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-apxs2=/usr/local/apache2/bin/apxs --without-pgsql --with-jpeg-dir=/usr/local/lib --with-zlib-dir=/usr/local/lib --with-gd=/usr/local --enable-mbstring --enable-exif --enable-force-cgi-redirect --enable-sockets --with-png-dir=/usr/local/lib --with-curl=/usr/local --with-ldap=/usr/local --with-openssl=/usr/local/ssl --with-gettext --with-pcre-dir=/usr/local --with-freetype-dir=/usr/local --with-mssql=/usr/local/freetds --with-readline --enable-soap
答案1
这一直是我使用 Solaris 时遇到的最大麻烦。本质上,如果您要编译某些内容,则需要确保以下所有内容均正确无误:
CFLAGS
/CXXFLAGS
(适用于 C++)LDFLAGS
(对于链接器)- 有可能
LD_LIBRARY_PATH
确保任何包含目录(用 指定-I
)和库目录(-R
和/或-L
)与您要构建的体系结构相匹配。对于 Solaris,gcc
通常首先查看/usr/lib
等/usr/sfw/lib
,但如果您想要 64 位,则需要针对 、 等进行编译/usr/lib/64
-/usr/sfw/lib/64
仅指定gcc -m64
是不够的。
ldd
您可以使用和来验证现有 iconv 库的 ISA file
。如果您自己编译了 libiconv,则需要重新编译它,否则请找到另一个二进制源或...重新编译它 :-)
答案2
就我而言,要编译 PHP 5.4.7,我还必须添加 PHP_LDFLAGS 环境变量:LDFLAGS="-L/opt/selfcompiled/libs/64 -L/lib/64 -L/usr/sfw/lib/64 -m64" PHP_LDFLAGS=$LDFLAGS