![PHP 启动:无法加载动态库:无法打开共享对象文件:没有这样的文件或目录](https://linux22.com/image/100591/PHP%20%E5%90%AF%E5%8A%A8%EF%BC%9A%E6%97%A0%E6%B3%95%E5%8A%A0%E8%BD%BD%E5%8A%A8%E6%80%81%E5%BA%93%EF%BC%9A%E6%97%A0%E6%B3%95%E6%89%93%E5%BC%80%E5%85%B1%E4%BA%AB%E5%AF%B9%E8%B1%A1%E6%96%87%E4%BB%B6%EF%BC%9A%E6%B2%A1%E6%9C%89%E8%BF%99%E6%A0%B7%E7%9A%84%E6%96%87%E4%BB%B6%E6%88%96%E7%9B%AE%E5%BD%95.png)
我正在尝试编译特定版本地球观测系统和它的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 模块构建后libgeos
和php-geos
PHP 模块之间运行才能libgeos
正确加载动态库。