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

问题描述 投票:0回答:1

有相关的帖子herehere

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

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

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

linker
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.