如何解决ldconfig创建版本号的链接

时间:2014-01-13 09:30:17

标签: c++ ld

假设我/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的正确方法是什么?

2 个答案:

答案 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环境变量。