Ld

ld找不到.so

  • July 21, 2016

我從原始碼安裝了 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/libld搜尋路徑中:

$ 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)
  ...

問題:

  • 為什麼在標準路徑中找不到ldlibzmq.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導致執行時連結器手動查找記憶體之外的該目錄。

引用自:https://unix.stackexchange.com/questions/297452