【问题标题】:Why we need separate library for static and dynamic linking?为什么我们需要单独的库来进行静态和动态链接?
【发布时间】:2017-12-27 01:58:19
【问题描述】:

有相关帖子herehere

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

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

功能相同的.so和.a的内容有什么区别?

【问题讨论】:

标签: linker


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-07-16
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 2011-03-16
    • 2011-09-05
    • 1970-01-01
    相关资源
    最近更新 更多