为什么我们需要单独的库来进行静态和动态链接?

时间:2017-12-27 01:58:20

标签: linker

有相关帖子herehere

根据我的理解,静态链接直接从库中插入代码(什么代码?机器代码?)到可执行文件中。但是,动态链接只插入引用(指针?)指向库中的某个位置。

然后我想知道为什么我们需要两个相同功能的独立版本的库?例如,对于intel MKL,我们有libmkl_sequential.a和libmkl_sequential.so。而静态链接必须链接静态库,动态链接必须链接动态库。 为什么动态链接不能简单地指向静态库?

.so和.a相同功能的内容之间的真正区别是什么?

1 个答案:

答案 0 :(得分:0)

您要执行的代码需要加载到内存中。静态链接的函数成为程序的一部分,因此在程序启动时它们都被加载在一起。

为什么动态链接不能简单地指向静态库?静态库是一个磁盘文件,你想怎么指向这个?必须有一个机制(加载器和绑定器)调查启动的可执行程序,询问它想要使用哪些函数,并将相应的库加载到内存中。 是的,两个版本中的netto代码(说明)" libmkl_sequential.a"和" libmkl_sequential.so"可能是相同的,但静态和动态类型的库需要不同的辅助元信息由图书馆格式创建者决定。