什么叫静态库和动态库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么叫静态库和动态库相关的知识,希望对你有一定的参考价值。

两者区别:
一,静态库的使用需要:
1
包含一个对应的头文件告知编译器lib文件里面的具体内容
2
设置lib文件允许编译器去查找已经编译好的二进制代码
二,动态库的使用:
程序运行时需要加载动态库,对动态库有依赖性,需要手动加入动态库
三,依赖性:
静态链接表示静态性,在编译链接之后,
lib库中需要的资源已经在可执行程序中了,
也就是静态存在,没有依赖性了
动态,就是实时性,在运行的时候载入需要的资源,那么必须在运行的时候提供
需要的
动态库,有依赖性,
运行时候没有找到库就不能运行了
四,区别:
简单讲,静态库就是直接将需要的代码连接进可执行程序;动态库就是在需要调用其中的函数时,根据函数映射表找到该函数然后调入堆栈执行。
做成静态库可执行文件本身比较大,但不必附带动态库
做成动态库可执行文件本身比较小,但需要附带动态库
五:
首先纠正所谓“静态连接就是把需要的库函数放进你的exe之中”的说法。在真实世界中,有三个概念:use
static
libary,
static
linked
dll,
dynamic
linked
dll.
多数人混淆了static
libary

static
linked
dll的概念,当然他们有似是而非的“相似之处”,比如都用到.lib,下面具体说明。
使用静态库(use
static
libary)是把.lib和其他.obj一起build在目标文件中,目标文件可以是.exe,也可以是.dll或.oxc等。一般情况下,可以根本就没有“对应的”.dll
文件,如c
run
time(crt)库。一个例子就是,写一个main(),build出来并不是只有几个字节,当然有人会说那还有exe文件头呢?是,即使加上文件头的尺寸,build出的执行文件仍然“莫名的大”。实际上那多出来的部分就是crt静态库。姑且可以把静态库.lib理解成外部程序的obj文件比较合理,它包含了函数的实现。
参考技术A 静态库是编写的时候加载进源代码进行编译的,如各种头文件。动态库是在程序运行的时候映射进程序的内存空间进行动态加载的,如DLL文件。

以上是关于什么叫静态库和动态库的主要内容,如果未能解决你的问题,请参考以下文章

动态库和静态库的区别

C语言里面的动态库和静态库

动态库和静态库的区别

关于动态库和静态库的问题。

Linux下的静态库和动态库

Linux下的动态库和静态库详解