道歉是因为我暂时没有环境自己去试验和整理以下问题:
1)假设我有四个库文件:libmylib_super.a
and libmylib_super.so
, mylib_dumb.a
and mylib_dumb.so
. 在指定要链接的库时,以下方法之间有什么区别:
A) -l:libmylib_super.a
B) -llibmylib_super
C) -lmylib_super
D)-lmylib_dumb
2)-static
来自手册页的定义:
在支持动态链接的系统上,这会阻止与共享库的链接。在其他系统上,此选项无效。
这个链接器选项与问题 #1 有什么关系吗?或者……他们会不会互相干扰?
谢谢。
--- 2009-12-28 编辑 ---
通过链接到 Boost date_time 库,我刚刚建立了我的环境并进行了一些试验。假设我有三个库文件:libboost_date_time-mt-d.a
, libboost_date_time-mt-d.so.1.41.0
, libboost_date_time-mt-d.so -> libboost_date_time-mt-d.so.1.41.0
(符号链接)。
A.1) -l:libboost_date_time-mt-d.a
==> 链接OK,即使没有库文件,二进制也可以工作。
A.2)-l:libboost_date_time-mt-d.a
带有-static
==>链接错误 /usr/bin/ld: cannot find -lm
C.1) -lboost_date_time-mt-d
==> 链接OK,二进制工作,但需要共享库文件。
C.2)-lboost_date_time-mt-d
带有-static
==>链接错误 /usr/bin/ld: cannot find -lm
关于 A.2 和 C.2 中的错误的任何想法?
此外,在 C.1 中运行程序时,它似乎在搜索名称为libboost_date_time-mt-d.so.1.41.0
但不是libboost_date_time-mt-d.so
. 如果程序在没有确切版本库的系统上运行,那会不会很不方便?使用共享库时处理版本的实用方法是什么?