问题描述
||
在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的“正确方法”。
解决方法
您安装了运行时软件包 <版本> -dev \”提供了共享库符号链接。因此,如果仅安装前者,则可以编译但不能链接。
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-