找不到動態鏈接庫的問題
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的動態鏈接庫有路徑了。
動態鏈接庫總結
動態鏈接庫的搜索路徑有如下:
- 根據LD_LIBRARY_PATH環境變量來找。
- 在/etc/ld.so.conf,加入搜索路徑。
- 在/etc/ld.so.conf.d/路徑下,加入*.conf文件裏面增加搜索路徑。