昨天和运维同事,把PHP升级到5.6的,一直编译出错提示:
首先是libiconv_open,按网上的方法解决后,重启apache的时候再报libphp5.so: undefined symbol: libiconv,导致apache重启不了。
网上对这个错误:undefined reference to libiconv_open,有两个解决方法
第一种方法:
后configure后
make ZEND_EXTRA_LIBS='-liconv'
第二种方法:
直接修改 Makefile ,在这个文件大约77行中
EXTRA_LIBS = ..... -lcrypt
在最后加上 -liconv,例如:
EXTRA_LIBS = ..... -lcrypt -liconv
加好过会,重启apache的时候,报这个错:
Cannot load modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: undefined symbol: libiconv
重启报这个错。
这个时候我想到,按上面的两方法的时候,编译一直会出现警告。都忽略掉了,现在看来还是iconv库没有找到。
不如在configure的时候指定iconv目录
最终解决方法如下:
#wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
#tar -zxvf libiconv-1.13.1.tar.gz
#cd libiconv-1.13.1
# ./configure --prefix=/usr/local/libiconv
# make
# make install
这个时候再编译php指定目录 --with-iconv=/usr/local/libiconv:
#./configure --prefix=/usr/local/php5.6 --with-config-file-path=/usr/local/php5.6/etc --with-apxs2=/usr/local/apache/bin/apxs --disable-fileinfo --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-exif --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-ftp --with-gettext --enable-soap --disable-ipv6 --disable-debug --enable-opcache --with-iconv=/usr/local/libiconv CC=gcc44 CXX=g++44
#make
#make install
编译中的警告再也没有出现。编译很快完成,再重启apache成功~