Compiling

PHP 啟動:無法載入動態庫:無法打開共享對象文件:沒有這樣的文件或目錄

  • June 16, 2017

我正在嘗試在Travis CI環境中編譯特定版本的GEOS及其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 行的 Unknown 中沒有此類文件或目錄

我已經在機器上執行了這個命令:

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 的完整日誌

我沒有找到讓擴展程序在 中查找共享庫的/usr/local/lib方法,但我確實找到了一種方法讓 libgeos 將它們安裝到/usr/lib擴展程序正在尋找它們的位置。

只需--prefix在建構 libgeos 時使用:

./configure --prefix=/usr

在較新的版本中,PHP 綁定現在是一個獨立的項目,因此ldconfig必須在建構之後libgeosphp-geosPHP 模組之間執行才能正確載入動態庫libgeos

引用自:https://unix.stackexchange.com/questions/329381