編譯php7遇到/usr/bin/ld: cannot find -liconv問題的解決方法

昨天我在編譯php-7.2.16的時候,輸完 make ZENDEXTRALIBS=-liconv 然後回車,編譯失敗並報錯:

    (前面略)…… -lz -lm -lssl -lcrypto -lcrypt -liconv -o sapi/cli/php

    /usr/bin/ld: cannot find -liconv

    collect2: ld returned 1 exit status

    make:  [sapi/cli/php] 錯誤 1

意思是系統找不到iconv相應的lib庫文件,也就是libiconv.so文件。但我之前已經在/usr/lib下做了libiconv.so的軟鏈接,爲什麼還會報錯呢?

查閱相關資料,無非三種情況:

    1、系統沒有安裝libiconv(這個對我不成立,我已經編譯安裝了)

    2、libiconv版本不對(這個不太可能,我的libiconv是最新版本)

    3、libiconv.so的軟鏈接文件不對(這個有可能)

於是乎檢查libiconv.so的軟鏈接文件,果然是這個問題,不得不說,這個軟鏈接做起來還是有點玄機的。以下是做軟鏈接的兩種錯誤做法:(就以我libiconv的安裝目錄是/usr/local/libiconv-1.15爲例)

    1、直接把libiconv.so文件做軟鏈接到/usr/lib

命令爲:ln -s /usr/local/libiconv-1.15/lib/libiconv.so /usr/lib

分析:[root@web01 ~]# ll /usr/local/libiconv-1.15/lib/libiconv.so

lrwxrwxrwx 1 root root 17 4月   5 10:17 /usr/local/libiconv-1.15/lib/libiconv.so -> libiconv.so.2.6.0

通過ll libiconv.so,發現libiconv.so本身就是一個軟鏈接,所以這個命令相當於對軟鏈接又做了一個軟鏈接。從實際結果來看,這個軟鏈接並沒有生效。

    2、既然對libiconv.so做軟鏈接不可行,那麼對libiconv.so的軟鏈接源文件libiconv.so.2.6.0進行軟鏈接

命令爲:ln -s /usr/local/libiconv-1.15/lib/libiconv.so.2.6.0 /usr/lib

分析:這回軟鏈接雖然生效了,但是文件名不對,生成的軟鏈接爲/usr/lib/libiconv.so.2.6.0,結尾是.so.2.6.0。而庫文件結尾應該是.so,所以編譯後系統仍然會提示找不到iconv的庫文件。

正確的軟鏈接做法是:

    把libiconv.so.2.6.0軟鏈接到/usr/lib/下同時起名爲libiconv.so

命令爲:ln -s /usr/local/libiconv-1.15/lib/libiconv.so.2.6.0 /usr/lib/libiconv.so

這樣,軟鏈接可以生效,重新編譯不會再報錯了。

####編譯安裝libiconv命令:

mkdir -p /application/tools && cd /application/tools

wget -c https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz

tar -zxvf libiconv-1.15.tar.gz -C /usr/local

cd /usr/local/libiconv-1.15

./configure --prefix=/usr/local/libiconv-1.15

make && make install

echo $?

####編譯安裝php命令:

mkdir -p /application/tools && cd /application/tools

wget https://www.php.net/distributions/php-7.2.16.tar.gz

tar -zxvf php-7.2.16.tar.gz -C /application

cd /application/php-7.2.16/

./configure --prefix=/application/php-7.2.16 --with-config-file-path=/application/php-7.2.16/etc --with-config-file-scan-dir=/application/php-7.2.16/etc/php.d --enable-mysqlnd --with-mysqli --with-pdo-mysql --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-gd --with-iconv --with-zlib --enable-xml --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-ftp --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-curl --with-jpeg-dir --with-freetype-dir --enable-opcache --with-iconv-dir=/usr/local/libiconv-1.15

make clean && make ZEND_EXTRA_LIBS=-liconv

make test && make install


後記:弄了一晚上沒弄出來,看網上也沒幾個人編譯安裝php7,都是yum安裝居多,老男孩書上還是用的老版本php5,看來編譯php真的能讓人頭皮發麻!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章