【发布时间】:2009-12-27 11:23:49
【问题描述】:
抱歉,因为目前我没有环境来亲自尝试和整理以下问题:
1) 假设我有四个库文件:libmylib_super.a 和 libmylib_super.so、mylib_dumb.a 和 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 ==> 链接正常,即使没有库文件,二进制也可以工作。
A.2) -l:libboost_date_time-mt-d.a 和 -static ==> 链接错误 /usr/bin/ld: cannot find -lm
C.1) -lboost_date_time-mt-d ==> 链接正常,二进制工作,但需要共享库文件。
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 的共享库文件。如果程序在没有确切版本库的系统上运行,那会不会很不方便?使用共享库时处理版本的实用方法是什么?
【问题讨论】: