【问题标题】:Linking 3rd party shared libraries without soname, linker name链接没有 soname、链接器名称的 3rd 方共享库
【发布时间】:2011-05-29 15:13:57
【问题描述】:

在 Debian Squeeze 上安装 liboost-dev 会给我几个库,例如 /usr/lib/libboost_thread.so.1.42.0,但没有 libboost_thread.so。现在我无法使用 gcc / ld 的 -l 标志进行链接,因为名称不以 .so 结尾。

我注意到/usr/lib 有很多其他形式为libfoo.so.N 的库没有libfoo.so,所以这不是Boost 特有的。我最终手动添加了libboost_thread.so.1libboost_thread.so 符号链接。 (ldconfig 的手册页建议它会添加链接,但它没有做任何事情)。

一切正常,但感觉很脏。我应该怎么做?

  • 使用一些我还没有找到的更具体的链接器选项(代价是使我的 makefile 依赖于特定的版本号)。
  • 只需手动添加符号链接(有破坏包管理的风险)。
  • 其他一些 Debian 的“正确方法”。

【问题讨论】:

  • 如果这个问题看起来很熟悉,几周前我问过类似的问题,将其删除为题外话,再次改变主意,然后发现我需要 +10k 业力来恢复我自己删除的帖子。

标签: linux gcc shared-libraries debian


【解决方案1】:

您安装了 run-timelibboost-thread1.42.0,但安装了 developmentlibboost-thread-dev(甚至是包罗万象的包 libboost-all-dev

一旦你有了相应的-dev 包,链接就可以工作了。这是大多数 Linux 发行版的一般特性——您几乎永远不会想要手动弄乱符号链接。

编辑:回应您的评论:

edd@max:~$ ls -l /usr/lib/libboost_thread.*
-rw-r--r-- 1 root root 176324 2010-10-21 00:56 /usr/lib/libboost_thread.a
lrwxrwxrwx 1 root root     25 2011-05-14 10:17 /usr/lib/libboost_thread.so -> \
                                                        libboost_thread.so.1.42.0
-rw-r--r-- 1 root root  88824 2010-10-21 00:56 /usr/lib/libboost_thread.so.1.42.0
edd@max:~$ dpkg -S /usr/lib/libboost_thread.so
libboost-thread1.42-dev: /usr/lib/libboost_thread.so
edd@max:~$ 

显然,包管理系统创建了链接并拥有它们。

【讨论】:

  • 如前所述,我安装了 libboost-dev。 'dpkg --get-selections | grep boost' 显示 libboost-dev 和 libboost1.42-dev。除符号链接外,一切都正确(包括 /usr/include 中的标头)。
  • 查看我对您问题的修改——我建议清除这两个软件包并重新安装它们。
  • 好的 - 我安装了 libboost-all-dev 并放入了正确的符号链接。非常感谢。我猜 libboost-dev 坏了。
  • 你知道,可能是 libboost-dev 太旧了,你需要通过 libboost-all-dev 引入的 libboost-thread1.42-dev。运行时包需要 -dev 包的一般规则仍然成立。很高兴知道您现在已经开始运行了。
【解决方案2】:

Dirk 对一般原则的回答是正确的,但对于不小心使用 boost 包装的人来说,似乎还有一个额外的陷阱。

通常标头和库符号链接在同一个包中,因此您无需考虑即可获得库符号链接。然而,使用 boost "libboost-dev" 提供了标头,但 "libboost--dev" 提供了共享库符号链接。所以如果你只安装前者,你会得到编译但不能链接的东西。

【讨论】:

    猜你喜欢
    • 2011-05-03
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多