您的位置:首页 > 运维架构 > Linux

64位 CentOS 6.3 系统安装 php 5.3.16 libiconv 报错

2013-03-07 08:50 489 查看

64位 CentOS 6.3 系统安装 php 5.3.16 libiconv 报错

2012-11-27 11:55:44

之前服务器上 php 是 5.2.14, 发现编译带的不少没用的东西, 开启 soap 缓存结果还出过问题. 于是升级下.

编译参数: './configure' '--prefix=/usr/local/php-5.3.16' '--with-libdir=lib64' '--with-config-file-path=/usr/local/php-5.3.16/etc' '--with-mysql' '--enable-fpm' '--with-openssl' '--with-zlib' '--with-curl' '--enable-mbstring' '--with-iconv-dir=/usr/local'

iconv 是之前安装过的 libiconv, 在 /usr/local/bin 目录.

一开始, 是在生成 php-fpm 时, 报一堆的 php-5.3.16/ext/iconv/iconv.c:337:

undefined reference to `libiconv'

然后Google 搜到一篇文章, 错误完全一样: undefined reference to `libiconv_open’ PHP 5.3.8 解决方法

改成 make ZEND_EXTRA_LIBS='-liconv' 编译.

于是生成 php-fpm OK 了, 但是! 后面生成的 php-5.3.16/sapi/cli/php 又有问题:

Generating phar.php

php-5.3.16/sapi/cli/php: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory

编译 php 没错, 运行时找不到 so.

于是尝试静态编译, 参考 http://www.linuxquestions.org/questions/linux-newbie-8/statically-compile-php-not-possible-then-860677/ 修改Makefile, 把 -export-dynamic 替换成 -all-static , 还是不行.

然后继续观察 php cli 的编译参数, 发现两个 "-L/usr/lib6464 -R /usr/lib6464" , 看来是 configure 脚本有问题, 64位系统中, 构造的 lib 路径错了.

手动加参数:

make ZEND_EXTRA_LIBS='-liconv -L/usr/local/lib'

成功...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: