Debian 12 / Ubuntu 24.04 LTS 上编译安装 PHP 8.4.2 时出现错误:configure: error: iconv does not support errno
,x86_64 和 ARM64 平台上均出现此错误
script 中其中 libiconv 的编译安装如下
# Download and install libiconv
wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.17.tar.gz
tar zxf libiconv-1.17.tar.gz
cd libiconv-1.17
./configure --enable-static
make && make install
cd ..
PHP 部分编译参数如下
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-config-file-scan-dir=/usr/local/php/conf.d \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-iconv=/usr/local/ \
...
...
ldd 查看共享动态库若正确则如下显示
root@hetzner-fsn1-003:~/libiconv-1.17# ldd $(which iconv)
linux-vdso.so.1 (0x0000f77deaa26000)
libiconv.so.2 => /usr/local/lib/libiconv.so.2 (0x0000f77dea8b0000)
libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000f77dea6f0000)
/lib/ld-linux-aarch64.so.1 (0x0000f77dea9e9000)
若提示 not found 则如下显示
root@hetzner-fsn1-003:~/libiconv-1.17# ldd $(which iconv)
linux-vdso.so.1 (0x0000f86724c72000)
libiconv.so.2 => not found
libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000f86724a50000)
/lib/ld-linux-aarch64.so.1 (0x0000f86724c35000)
解决办法
export 添加临时变量
更新 LD_LIBRARY_PATH
: 添加 /usr/local/lib
到 LD_LIBRARY_PATH
环境变量:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
ln 创建软链接指向 /usr/local/lib/libiconv.so.2
可以使用符号链接将 libiconv.so.2
放置在一个系统自动搜索的目录中。例如,将它链接到 /usr/lib
:
sudo ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2
sudo ldconfig
root@hetzner-fsn1-003:~# ls -l /usr/lib/libiconv.so.2
lrwxrwxrwx 1 root root 28 Jan 19 03:52 /usr/lib/libiconv.so.2 -> /usr/local/lib/libiconv.so.2
追加 '/usr/local/lib' 到 '/etc/ld.so.conf'
将 /usr/local/lib
添加到 /etc/ld.so.conf
并执行 ldconfig
:
echo "/usr/local/lib" | sudo tee -a /etc/ld.so.conf
sudo ldconfig
参考资料
configure does not detect GNU libiconv correctly · Issue #12213 · php/php-src