【未完待補充】linux 設置So動態庫鏈接路徑


緣起

安裝python的包Rtree(Rtree-0.8.2),但需要先安裝C語言依賴包spatialindex-src(spatialindex-src-1.8.5)。在安裝完spatialindex-src后,再安裝Rtree過程中出現問題:

dimite@ubuntu:~/wzh/Rtree-0.8.2$ python setup.py build
Traceback (most recent call last):
  File "setup.py", line 4, in <module>
    import rtree
  File "/home/dimite/wzh/Rtree-0.8.2/rtree/__init__.py", line 1, in <module>
    from .index import Rtree
  File "/home/dimite/wzh/Rtree-0.8.2/rtree/index.py", line 6, in <module>
    from . import core
  File "/home/dimite/wzh/Rtree-0.8.2/rtree/core.py", line 106, in <module>
    rt = ctypes.CDLL(lib_name)
  File "/usr/lib/python2.7/ctypes/__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: libspatialindex_c.so.4: cannot open shared object file: No such file or directory

錯誤日志提示找不到動態鏈接庫 libspatialindex_c.so.4,利用命令尋找動態鏈接庫

dimite@ubuntu:~/wzh/Rtree-0.8.2$ sudo find / -name libspatialindex_c.so.4
[sudo] password for dimite: 
/usr/local/lib/libspatialindex_c.so.4
/home/dimite/wzh/spatialindex-src-1.8.5/.libs/libspatialindex_c.so.4

需要四個動態鏈接庫文件,都在/usr/local/lib中

dimite@ubuntu:~/wzh/Rtree-0.8.2$ ls /usr/local/lib | grep libspatialindex | grep so
libspatialindex_c.so
libspatialindex_c.so.4
libspatialindex_c.so.4.0.1
libspatialindex.so
libspatialindex.so.4
libspatialindex.so.4.0.1

解決

方法一:
把動態鏈接庫所在的路徑添加到/etc/ld.so.conf中

include /etc/ld.so.conf.d/*.conf
/usr/local/lib/

然后更新/etc/so.cache

sudo  ldconfig

方法二:
同方法一,把具體的so鏈接庫寫到/etc/ld.so.conf.d/下的conf文件中

/usr/local/lib/

方法三:
設置$LD_LIBRARY_PATH=庫所在目錄(多個目錄用:分隔)

結論

以root身份把庫路徑加入到/etc/ld.so.conf或在/etc/ld.so.conf.d中創建特定的.conf文件,運行ldconfig更新動態鏈接庫

設置$LD_LIBRARY_PATH=庫所在目錄(多個目錄用:分隔)

深究

python怎么調用c的庫

python的setup.py 怎么執行,里邊沒有看到具體的build、install字眼

ctype里的__init__.py又是怎么和動態鏈接庫a聯系在一起


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM