链接第3方共享库时不使用soname,链接器名称

问题描述

|| 在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.1
libboost_thread.so
符号链接。 (
ldconfig
的手册页建议它将添加链接,但它没有执行任何操作)。 一切正常,但感觉很脏。我该怎么办? 使用一些我尚未找到的更特定的链接器选项(以使我的makefile依赖于特定的版本号为代价)。 只需手动添加符号链接(可能会破坏软件包管理)。 其他一些Debian的“正确方法”。     

解决方法

        您安装了运行时软件包
libboost-thread1.42.0
,但安装了开发软件包
libboost-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:~$ 
显然,程序包管理系统创建了链接,并拥有它们。     ,        关于基本原理,Dirk的回答是正确的,但对于升压包装不熟悉的人似乎还有一个陷阱。 通常,标头和库符号链接位于同一程序包中,因此无需考虑即可获得库符号链接。但是使用boost时,“ libboost <版本> -dev \”提供了标头,但是“ libboost- <版本> -dev \”提供了共享库符号链接。因此,如果仅安装前者,则可以编译但不能链接。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...