我从源代码安装了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) ...
问题:
- 为什么在标准路径中找不到without 呢
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,以防有任何用处
答案1
当您将新库添加到系统目录时,您可能需要使用以下命令刷新链接器缓存
ldconfig
这需要作为 运行root
。
如果没有此命令,运行时链接器将对哪些库可用有一个过时的想法。
如果您决定将新目录添加到系统链接器路径中,您同样需要执行此操作。
设置LD_LIBRARY_PATH
导致运行时链接器手动查找缓存外部的该目录。