假设我/a/lib/dir
有文件
-rwxrwxr-x libboost_signals.so
-rwxrwxr-x libboost_signals.so.1.55.0
我创建了一个文件:/etc/ld.so.conf.d/testlib.conf
,内容为
/a/lib/dir
然后运行
sudo ldconfig
sudo ldconfig -v | head
libboost_signals.so.1.55.0 -> libboost_signals.so.1.55.0
由于ldconfig创建的链接libboost_signals.so.1.55.0
不是libboost_signals.so
,
使用g ++编译源代码时,我无法使用-lboost_signals
。
但是-L/a/lib/dir/ -lboost_signals
没问题。
将.bashrc文件编辑为:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/a/lib/dir
然后
source .bashrc
将是相同的结果。
那么添加系统LD_LIBRARY_PATH的正确方法是什么?
答案 0 :(得分:0)
将目录添加到ldconfig或LD_LIBRARY_PATH后,它将知道此目录中的所有共享库。 它包括两个共享库。 如果lib在两个路径中出现两次,则需要稍后的路径。
ldconfig只是管理共享库的名称解析。它不会创建任何链接。你应该创建链接。
您找到了-lboost_signals
,因为您拥有libboost_signals.so
。
libboost_signals.so
应该是libboost_signals.so.1.55.0
的软链接。
但它看起来像你复制了它。如果您替换libboost_signals.so.1.55.0
,您的计划将继续使用旧的libboost_signals.so
试试这个:
cd /a/lib/dir
rm libboost_signals.so
link -s libboost_signals.so.1.55.0 libboost_signals.so
编辑:像这样运行ldconfig:
sudo ldconfig -p | grep libboost_signals
我想你会看到这两个文件
答案 1 :(得分:0)
使用g ++编译源代码时,我无法使用
-lboost_signals
。但是
-L/a/lib/dir/ -lboost_signals
没问题。
LD_LIBRARY_PATH
和/etc/ld.so.conf.d
仅控制运行时链接程序ld.so
的行为,不会影响由ld
完成的目标文件和库的链接,这就是必须使用-L/a/lib/dir/
的原因。
没有要添加到ld
链接器路径的配置文件或环境变量。人们通常在makefile中硬编码额外的链接器路径。 Makefile通常会考虑LDFLAGS
环境变量。