昨天和運維同事,把PHP升級到5.6的,一直編譯出錯提示:php
首先是libiconv_open,按網上的方法解決後,重啓apache的時候再報libphp5.so: undefined symbol: libiconv,致使apache重啓不了。mysql
網上對這個錯誤:undefined reference to libiconv_open,有兩個解決方法sql
第一種方法:shell
後configure後 apache
make ZEND_EXTRA_LIBS='-liconv'運維
第二種方法:curl
直接修改 Makefile ,在這個文件大約77行中socket
EXTRA_LIBS = ..... -lcrypturl
在最後加上 -liconv,例如:
spa
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成功~