静态和动态链接库
问题描述:
我对链接库有一些问题。静态和动态链接库
连接器如果决定,如果我想链接的库链接静态或动态?是否由文件扩展(.a/ .so)决定?
是否有可能动态链接.a库?
是否有可能将.a库转换为.so库而不需要源代码?
答
- 链接器通过查看扩展名来决定如何链接库,但这很大程度上取决于链接器。 AIX链接器有一些相当奇特的行为。此外,如果同一位置同时存在.so和.so两个版本的库,则命令行开关会让您确定使用哪个链接器。
- 排序。您可以将.a链接到.so,但会有性能问题 - 共享库应该使用与位置无关的代码来构建,以获得最佳性能。根据代码,链接器可能会拒绝链接它,因为它无法修补重定位信息。但是你不能告诉链接器把.a当作一个.so
- 如上 - 也许。
是的,不,不。您通常需要编译代码*独立位置*以使其可用作共享库;除非明确要求,否则通常不会这样做。 –
@KerrekSB这难道不是答案吗? – delnan