PHP 启动:无法加载动态库:无法打开共享对象文件:没有这样的文件或目录

PHP 启动:无法加载动态库:无法打开共享对象文件:没有这样的文件或目录

我正在尝试编译特定版本地球观测系统和它的PHP 绑定在里面特拉维斯·西尔环境;他们正在使用Ubuntu。

这是我的安装脚本:

sudo apt-get update
sudo apt-get remove 'libgeos.*'
sudo apt-get autoremove

wget https://github.com/libgeos/libgeos/archive/$VERSION.tar.gz
tar zxf $VERSION.tar.gz
cd libgeos-$VERSION
./autogen.sh
./configure
make
sudo make install
cd ..

wget https://git.osgeo.org/gogs/geos/php-geos/archive/1.0.0rc1.tar.gz
tar zxf 1.0.0rc1.tar.gz
cd php-geos
./autogen.sh
./configure
make
mv modules/geos.so $(php-config --extension-dir)
cd ..

echo "extension=geos.so" > geos.ini
phpenv config-add geos.ini

一切似乎都编译得很好,但是当 PHP 尝试加载 GEOS 扩展时,会出现以下消息:

PHP 启动:无法加载动态库 '/home/travis/.phpenv/versions/5.6.28/lib/php/extensions/no-debug-zts-20131226/geos.so' - libgeos_c.so.1:无法打开共享对象文件:第 0 行“未知”中没有此类文件或目录

我在机器上执行了这个命令:

sudo find / -name 'libgeos_c.so*'

这是结果:

/usr/local/lib/libgeos_c.so.1.9.0
/usr/local/lib/libgeos_c.so.1
/usr/local/lib/libgeos_c.so
/home/travis/build/brick/geo/libgeos-3.5.0/capi/.libs/libgeos_c.so.1.9.0T
/home/travis/build/brick/geo/libgeos-3.5.0/capi/.libs/libgeos_c.so.1.9.0
/home/travis/build/brick/geo/libgeos-3.5.0/capi/.libs/libgeos_c.so.1
/home/travis/build/brick/geo/libgeos-3.5.0/capi/.libs/libgeos_c.so

因此,看起来新构建的 GEOS PHP 扩展正在尝试从/usr/local/lib.

我怎样才能解决这个问题?

这里是完整登录 Travis CI

答案1

我没有找到一种方法让扩展程序在 中查找共享库/usr/local/lib,但我确实找到了一种方法让 libgeos 将它们安装到/usr/lib,这就是扩展程序寻找它们的地方。

--prefix只需在构建 libgeos 时使用:

./configure --prefix=/usr

答案2

在较新的版本中,PHP 绑定现在是一个独立的项目,因此ldconfig必须在 PHP 模块构建后libgeosphp-geosPHP 模块之间运行才能libgeos正确加载动态库。

相关内容