静态和动态链接库

时间:2013-08-23 11:53:43

标签: c++ shared-libraries static-libraries static-linking dynamic-linking

我对链接库有一些疑问。

如果我要链接的库是静态链接还是动态链接,链接器如何决定?它是由文件扩展( .a / .so)决定的吗?

是否可以动态链接.a库?

是否可以在没有源的情况下将.a库转换为.so库?

2 个答案:

答案 0 :(得分:1)

  1. 链接器通常通过查看扩展来决定如何链接库,但这几乎取决于链接器。 AIX链接器有一些非常奇特的行为。此外,如果您在同一位置同时具有.so和.so版本的库,那么命令行开关已经让链接器将确定它使用哪个
  2. 排序。您可以将.a链接到.so但是会出现性能问题 - 应该使用与位置无关的代码构建共享库以获得最佳性能。根据代码,链接器可能会拒绝链接它,因为它无法修补重定位信息。但你无法告诉链接器将.a视为.so
  3. 如上所述 - 也许。

答案 1 :(得分:0)

如果在搜索路径中找到两种类型的库,gcc链接器将默认动态链接到.so文件。您可以使用命令行参数覆盖它,如here所述。

相关问题