虽然两者都被称为“链接器”并用于链接二进制文件,但我无法真正弄清楚它们之间有何不同。谁能告诉我他们的区别?
答案1
无需太技术性:两者都是“链接器”,即将一段编译代码与另一段编译代码组合/加载到另一段编译代码中的工具。
ld
是静态链接器,而ld.so
是动态链接器。
我相信这些字母so
是“共享对象”的缩写,您通常会将其视为共享库的文件名后缀,即可以动态链接到程序中的库(一个库在多个程序之间“共享”) 。相反,静态库通常具有文件名后缀.a
,表示“存档”(由实用程序创建ar
)。
静态链接器在编译时链接程序或库,通常作为编译过程的最后一步,创建二进制可执行文件或库。对于二进制可执行文件,它可能是静态二进制文件全部加载到二进制文件本身的库,或者它可能是动态链接的二进制文件,只有一些静态链接的库。
动态链接器在运行时将编译时动态链接的库加载到进程的地址空间中。
ld
请参阅ld.so
您的系统的手册。