编译php7遇到/usr/bin/ld: cannot find -liconv问题的解决方法

昨天我在编译php-7.2.16的时候,输完 make ZENDEXTRALIBS=-liconv 而后回车,编译失败并报错:php

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

    /usr/bin/ld: cannot find -liconvweb

    collect2: ld returned 1 exit statussql

    make:  [sapi/cli/php] 错误 1api

意思是系统找不到iconv相应的lib库文件,也就是libiconv.so文件。但我以前已经在/usr/lib下作了libiconv.so的软连接,为何还会报错呢?session

查阅相关资料,无非三种状况:php7

    一、系统没有安装libiconv(这个对我不成立,我已经编译安装了)app

    二、libiconv版本不对(这个不太可能,个人libiconv是最新版本)curl

    三、libiconv.so的软连接文件不对(这个有可能)socket

因而乎检查libiconv.so的软连接文件,果真是这个问题,不得不说,这个软连接作起来仍是有点玄机的。如下是作软连接的两种错误作法:(就以我libiconv的安装目录是/usr/local/libiconv-1.15为例)

    一、直接把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自己就是一个软连接,因此这个命令至关于对软连接又作了一个软连接。从实际结果来看,这个软连接并无生效。

    二、既然对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真的能让人头皮发麻!

相关文章
相关标签/搜索