在 Solaris 10 64 位上配置 PHP

在 Solaris 10 64 位上配置 PHP

我们目前在 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

相关内容