1

我有一些关于链接库的问题。

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

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

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

4

2 回答 2

1
  1. 链接器通常通过查看扩展来决定如何链接库,但这几乎取决于链接器。AIX 链接器有一些相当奇特的行为。此外,如果您在同一位置同时拥有 .so 和 .so 版本的库,则您为链接器提供的命令行开关将确定它使用哪个
  2. 有点。您可以将 .a 链接到 .so 中,但会出现性能问题 - 共享库应使用与位置无关的代码构建以获得最佳性能。并且根据代码,链接器可能会拒绝链接它,因为它无法修补重定位信息。但是您不能告诉链接器将 .a 视为 .so
  3. 如上所述 - 也许。
于 2013-08-23T12:10:04.467 回答
0

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

于 2013-10-17T10:00:05.223 回答