Compiling
PHP 啟動:無法載入動態庫:無法打開共享對象文件:沒有這樣的文件或目錄
我正在嘗試在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
.我怎樣才能解決這個問題?
我沒有找到讓擴展程序在 中查找共享庫的
/usr/local/lib
方法,但我確實找到了一種方法讓 libgeos 將它們安裝到/usr/lib
擴展程序正在尋找它們的位置。只需
--prefix
在建構 libgeos 時使用:./configure --prefix=/usr
在較新的版本中,PHP 綁定現在是一個獨立的項目,因此
ldconfig
必須在建構之後libgeos
和php-geos
PHP 模組之間執行才能正確載入動態庫libgeos
。