【发布时间】:2011-06-12 04:48:36
【问题描述】:
我正在编写的代码可以在 Windows XP 和 Mac OS X 上完美运行。在 CentOS(以及 Fedora 和 Ubuntu)上对其进行测试时,它无法正常运行。搜索网络使我得出结论,导致问题的是iconv 的glibc 版本。所以现在我需要iconv 的libiconv 版本才能让Zend Lucene 正常工作。
我已经下载了 libiconv 并将其配置为 --prefix=/usr/local、make,然后是 make install,没有任何错误。好像安装成功了,因为执行/usr/local/bin/iconv --version说版本是libiconv。虽然一个简单的iconv --version 仍然给出了glibc 版本。
然后我使用 --with-iconv=/usr/local 从源代码重新编译 PHP。但是,phpinfo() 显示正在使用的iconv 是glibc 版本。我也已经使用--with-iconv-dir 或/usr/local/bin/php 尝试了其他几个编译。
当然,我在重新编译PHP后重启了web服务器。
我的/etc/httpd/conf/httpd.conf 中有以下行:
LoadModule /usr/lib/httpd/modules/libphp5.so
而libphp5.so实际上在/usr/lib/httpd/modules中。
phpinfo() 显示 PHP 5.3.3。我还 yum 删除了预装的 PHP 5.1.* 以确保。但是iconv仍然使用glibc版本。
ldd /usr/lib/httpd/modules/libphp5.so给了
linux-gate.so.1 => (0x003b1000)
/usr/local/lib/preloadable_libiconv.so (0x00110000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x001ed000)
librt.so.1 => /lib/librt.so.1 (0x0021f000)
libmysqlclient.so.15 => /usr/lib/mysql/libmysqlclient.so.15 (0x003b2000)
libldap-2.3.so.0 => /usr/lib/libldap-2.3.so.0 (0x0026e000)
liblber-2.3.so.0 => /usr/lib/liblber-2.3.so.0 (0x00370000)
libiconv.so.2 => /usr/local/lib/libiconv.so.2 (0x00516000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x002a8000)
libpng12.so.0 => /usr/lib/libpng12.so.0 (0x00228000)
libz.so.1 => /usr/lib/libz.so.1 (0x00328000)
libcurl.so.3 => /usr/lib/libcurl.so.3 (0x00f23000)
libm.so.6 => /lib/libm.so.6 (0x0033b000)
libdl.so.2 => /lib/libdl.so.2 (0x00364000)
libnsl.so.1 => /lib/libnsl.so.1 (0x0037e000)
libxml2.so.2 => /usr/lib/libxml2.so.2 (0x00f5f000)
libssl.so.6 => /lib/libssl.so.6 (0x0862c000)
libcrypto.so.6 => /lib/libcrypto.so.6 (0x04145000)
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x08e2d000)
libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x0611a000)
libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x005f4000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0x0024e000)
libidn.so.11 => /usr/lib/libidn.so.11 (0x071f5000)
libc.so.6 => /lib/libc.so.6 (0x08aa6000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00397000)
/lib/ld-linux.so.2 (0x00251000)
libresolv.so.2 => /lib/libresolv.so.2 (0x0748a000)
libsasl2.so.2 => /usr/lib/libsasl2.so.2 (0x07ddf000)
libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x062b7000)
libkeyutils.so.1 => /lib/libkeyutils.so.1 (0x00369000)
libselinux.so.1 => /lib/libselinux.so.1 (0x0913b000)
libsepol.so.1 => /lib/libsepol.so.1 (0x07eb4000)
这是来自NullPointer.ph的交叉帖子
【问题讨论】:
-
ldd /usr/lib/httpd/modules/libphp5.so和ldd /usr/libexec/httpd/httpd显示什么? AFAIK,apache 也依赖于libiconv。您不能在一个进程中加载两个版本的libiconv。 -
更新问题以反映
ldd /usr/lib/httpd/modules/libphp5.so。第二个命令给了我一个No such file or directory。 -
尝试使用
--with-iconv=shared,/usr/local进行配置 -
@Ismail,我也试过这个,但没有用。还是谢谢。
标签: php linux apache glibc iconv