道歉是因为我暂时没有环境自己去试验和整理以下问题:
1)假设我有四个库文件:libmylib_super.aand libmylib_super.so, mylib_dumb.aand 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. 如果程序在没有确切版本库的系统上运行,那会不会很不方便?使用共享库时处理版本的实用方法是什么?