为什么我们需要单独的库来进行静态和动态链接?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我们需要单独的库来进行静态和动态链接?相关的知识,希望对你有一定的参考价值。
根据我的理解,静态链接直接将代码(什么代码?机器代码?)从库插入可执行文件。但是,动态链接只插入引用(指针?)指向库中的某个位置。
然后我想知道为什么我们需要两个相同功能的独立版本的库?例如,对于intel MKL,我们有libmkl_sequential.a和libmkl_sequential.so。而静态链接必须链接静态库,动态链接必须链接动态库。为什么动态链接不能简单地指向静态库?
.so和.a相同功能的内容之间的真正区别是什么?
答案
您要执行的代码需要加载到内存中。静态链接的函数成为程序的一部分,因此在程序启动时它们都被加载在一起。
为什么动态链接不能简单地指向静态库?静态库是一个磁盘文件,你想怎么指向这个?必须有一个机制(加载器和绑定器)调查启动的可执行程序,询问它想要使用哪些函数,并将相应的库加载到内存中。是的,两个版本“libmkl_sequential.a”和“libmkl_sequential.so”中的netto代码(指令)可能相同,但静态和动态类型的库需要由库格式创建者指定的不同辅助元信息。
以上是关于为什么我们需要单独的库来进行静态和动态链接?的主要内容,如果未能解决你的问题,请参考以下文章