Ld
ld找不到.so
我從原始碼安裝了 zeromq 3.2.5
$ wget http://download.zeromq.org/zeromq-3.2.5.tar.gz $ tar xf zeromq-3.2.5.tar.gz $ cd zeromq-3.2.5 $ ./configure && make -j4 $ sudo make install
這安裝
libzmq.so.3
到/usr/local/lib
:$ sudo updatedb $ locate libzmq.so.3
/usr/local/lib/libzmq.so.3 /usr/local/lib/libzmq.so.3.0.0
我已經確認它
/usr/local/lib
在ld
搜尋路徑中:$ grep /usr/local/lib /etc/ld.so.conf.d/*
/etc/ld.so.conf.d/libc.conf:/usr/local/lib
我已經確認
ld
可以找到圖書館:$ ldconfig -v 2>/dev/null | egrep -e zmq\|^/
... /usr/local/lib: libzmq.so.3 -> libzmq.so.3.0.0 ...
但是,如果我
ldd
在我的應用程序上執行,它找不到libzmq.so.3
$ ldd test_app
... libzmq.so.3 => not found ...
如果我設置
LD_LIBRARY_PATH
然後它工作$ export LD_LIBRARY_PATH=/usr/local/lib $ ldd test_app
... libzmq.so.3 => /usr/local/lib/libzmq.so.3 (0x00007f22418d9000) ...
問題:
- 為什麼在標準路徑中找不到
ld
?libzmq.so.3``LD_LIBRARY_PATH
- 如何在無需設置的情況下解決此問題
LD_LIBRARY_PATH
?筆記:
RPATH
設置在二進製文件上,以防這很重要:$ readelf -a test_app | grep RPATH 0x000000000000000f (RPATH) Library rpath: [/home/steve/src/.../bin/gcc-4.9.3/debug]
我正在執行 Ubuntu 14.04,以防萬一
當您將新庫添加到系統目錄時,您可能需要刷新連結器記憶體
ldconfig
這需要作為
root
.如果沒有這個命令,執行時連結器將對可用的庫有一個陳舊的想法。
如果您決定將新目錄添加到系統連結器路徑,您同樣需要這樣做。
設置
LD_LIBRARY_PATH
導致執行時連結器手動查找記憶體之外的該目錄。