链接没有soname,链接器名称的第三方共享库

时间:2011-05-29 15:13:58

标签: linux gcc shared-libraries debian

在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'正确方法'来做到这一点。

2 个答案:

答案 0 :(得分:2)

您安装了运行时包[{1}},但是开发libboost-thread1.42.0(甚至是全能包libboost-thread-dev }。

获得相应的libboost-all-dev包后,链接即可生效。这是大多数Linux发行版的一般特性 - 你几乎从不想要手工处理符号链接。

编辑:回复您的评论:

-dev

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

答案 1 :(得分:0)

关于基本原理,德克的答案是正确的,但对于升压包装不熟练的人似乎还有一个陷阱。

通常,标头和库符号链接位于同一包中,因此无需考虑即可获得库符号链接。但是,通过增强,“ libboost <版本> -dev”提供了标头,而“ libboost- <版本> -dev”提供了共享库符号链接。因此,如果仅安装前者,则可以编译但不能链接。