在非标准位置使用 lib 构建 PHP

问题描述 投票:0回答:1

我正在尝试从源代码编译旧版本(5.6.38)的 PHP,尽管我认为这个问题可能更多的是关于构建软件,其中所需的库位于非标准位置,而不是专门针对 PHP。

当我运行 make 时,出现以下错误:

/usr/bin/ld: warning: libicuuc.so.72, needed by /usr/lib/gcc/x86_64-linux-gnu/12/../../../x86_64-linux-gnu/libxml2.so, may conflict with libicuuc.so.69
Generating phar.php
/tmp/tarballs/php-5.6.38/sapi/cli/php: error while loading shared libraries: libicudata.so.69: cannot open shared object file: No such file or directory
make: *** [Makefile:375: ext/phar/phar.php] Error 127

我的配置如下:

CPPFLAGS='-DU_USING_ICU_NAMESPACE=1 -DU_DEFINE_FALSE_AND_TRUE=1' PHP_RPATHS=/opt/icu/lib ./configure --prefix=/opt/php-5.6.38 \
    --enable-fpm \
    --with-fpm-user=www-data \
    --enable-mbstring \
    --enable-ftp \
    --with-jpeg-dir=/opt/libjpeg-turbo \
    --with-gd \
    --with-gettext \
    --with-iconv \
    --with-xmlrpc \
    --with-gmp \
    --enable-intl \
    --with-icu-dir=/opt/icu \
    --with-pdo-mysql=mysqlnd \
    --with-mysqli=mysqlnd \
    --with-zlib \
    --with-kerberos \
    --with-png-dir=/usr \
    --with-freetype-dir=/opt/freetype \
    --with-mcrypt \
    --with-mhash \
    --with-tidy=/opt/tidy-html5

我尝试使用(作为配置命令的一部分):

LDFLAGS="-Wl,-rpath,/opt/icu/lib -R/opt/icu/lib -L/opt/icu/lib"

以及与之相关的各种变体,但 make 上总是出现相同的错误。 我可以让它编译而不出现错误的唯一方法是运行

LD_LIBRARY_PATH="/opt/icu/lib:${LD_LIBRARY_PATH}" make

但我认为虽然这将允许 make 完成,但它并不能解决实际问题,并且当 php 运行时,它仍然会在系统位置中查找 icu lib,而不是我想要的非标准位置正在寻找。

任何人都可以建议我需要做什么才能在像这样的非标准位置使用 icu lib 进行编译吗?

php compiler-errors shared-libraries
1个回答
0
投票

使用非标准位置的库编译 PHP 5.6.38 时,您可能会遇到与 ICU 库类似的问题。看来您需要确保构建和运行时链接器都知道在哪里可以找到这些库。

修改您的 CPPFLAGS##

首先,您的 CPPFLAGS 和 LDFLAGS 应设置正确。您的 LDFLAGS 已经走在正确的轨道上,但可能需要进行一些小调整。

CPPFLAGS='-I/opt/icu/include -DU_USING_ICU_NAMESPACE=1 -DU_DEFINE_FALSE_AND_TRUE=1' \
LDFLAGS="-L/opt/icu/lib -Wl,-rpath,/opt/icu/lib" \
PHP_RPATHS=/opt/icu/lib \
./configure --prefix=/opt/php-5.6.38 \
--enable-fpm \
--with-fpm-user=www-data \
--enable-mbstring \
--enable-ftp \
--with-jpeg-dir=/opt/libjpeg-turbo \
--with-gd \
--with-gettext \
--with-iconv \
--with-xmlrpc \
--with-gmp \
--enable-intl \
--with-icu-dir=/opt/icu \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-zlib \
--with-kerberos \
--with-png-dir=/usr \
--with-freetype-dir=/opt/freetype \
--with-mcrypt \
--with-mhash \
--with-tidy=/opt/tidy-html5
enter code here

确保运行时##

确保运行时链接器可以找到您的库。一种方法是在运行 make 之前以及运行 PHP 时在您的环境中设置 LD_LIBRARY_PATH

export LD_LIBRARY_PATH="/opt/icu/lib:${LD_LIBRARY_PATH}"
make

如果这有帮助或者您遇到任何其他问题,请告诉我

© www.soinside.com 2019 - 2024. All rights reserved.