【问题标题】:ld cannot find library that is installedld 找不到已安装的库
【发布时间】:2009-10-14 16:54:52
【问题描述】:

我坐在 OpenSuse 11.1 x64 Box 上,我有一个使用 sigc++ 的模块。像这样链接时:

g++ [a lot of o's, L's and l's] -lsigc-2.0

我明白了

/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld: cannot find -lsigc-2.0

但是图书馆在那里。
在文件系统中:

$ sudo find / -name "libsigc-2.0*"
/usr/lib64/libsigc-2.0.so.0.0.0
/usr/lib64/libsigc-2.0.so.0
/usr/lib64/libsigc-2.0.so

在 ld.so.conf 我有:

/usr/lib64

在调用 ldconfig 时:

$ ldconfig -v | grep sigc
libsigc-2.0.so.0 -> libsigc-2.0.so.0.0.0

为什么?

【问题讨论】:

  • 我刚刚意识到 ldconfig 并没有推出 libsigc-2.0.so,而只是推出了 libsigc-2.0.so.0。两者都是 libsigc-2.0.so.0.0.0 的符号链接,但为什么 ldconfig 只处理 .0 链接?

标签: linux gcc linker shared-libraries ld


【解决方案1】:

我太笨了。这是一个旧代码库,就在 -lsigc-2.0 语句之前,我有一个

-Wl,-Bstatic

显然,libsigc 没有静态库(不再)。

【讨论】:

    【解决方案2】:

    libsigc-2.0.so 可能与 SONAME 链接,而不是 libsigc-2.0

    objdump -p /usr/lib64/libsigc-2.0.so | grep SONAME

    如果您看到意外情况,例如libsigc,您可能需要使用该名称创建一个额外的符号链接。

    【讨论】:

    • 它给了我 SONAME libsigc-2.0.so.0 这就是 ldconfig 用来设置链接到 libsigc-2.0.so.0.0.0
    最近更新 更多