自主編譯安裝的軟件找不到動態鏈接庫的問題

找不到動態鏈接庫的問題

Python多版本編譯安裝的問題

ubuntu16.04默認的Python3版本是3.5,最新的已經是3.8.2了,想要編譯安裝一個新版本的與舊版本共存。於是很開心的下載了tar包,執行:

./configure --prefix=/opt/python3.8 --enable-shared CFLAGS=-fPIC
make
sudo make install

想着這樣就可以在/opt/python3.8/bin/python3使用新版python了,結果報錯了,告知缺少一個動態鏈接庫。然後在/opt/python3.8/lib中找到了缺少的動態鏈接庫,那面只能有一個解釋了,python3在運行的時候沒有找到這個動態鏈接庫。

問題解決

查看一個可執行文件依賴的動態鏈接庫,可以使用命令:ldd

ldd ./python3

可以查看文件對動態鏈接庫的依賴情況,發現缺少的那個動態鏈接庫的確是顯示的notfond,如下:

$ldd ./python3
        linux-vdso.so.1 =>  (0x00007ffc31521000)
                libpython3.8.so.1.0 => not found
                libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc3f85d6000)
                libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc3f820c000)
                /lib64/ld-linux-x86-64.so.2 (0x00007fc3f87f3000)

解決方法:

echo "/opt/python3.8/lib" > /etc/ld.so.conf.d/python3.8.conf
ldconfig

然後再ldd ./python3,發現原本顯示not found的動態鏈接庫有路徑了。

動態鏈接庫總結

動態鏈接庫的搜索路徑有如下:

  1. 根據LD_LIBRARY_PATH環境變量來找。
  2. 在/etc/ld.so.conf,加入搜索路徑。
  3. 在/etc/ld.so.conf.d/路徑下,加入*.conf文件裏面增加搜索路徑。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章