ld找不到.so

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

问题:

  • 为什么在标准路径中找不到without 呢ldlibzmq.so.3LD_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,以防有任何用处

答案1

当您将新库添加到系统目录时,您可能需要使用以下命令刷新链接器缓存

ldconfig

这需要作为 运行root

如果没有此命令,运行时链接器将对哪些库可用有一个过时的想法。

如果您决定将新目录添加到系统链接器路径中,您同样需要执行此操作。

设置LD_LIBRARY_PATH导致运行时链接器手动查找缓存外部的该目录。

相关内容