如何区分静态链接库和动态连接库

之前一直不是很理解静态链接库和动态连接库的区别,今天在此做一下汇总。首先从下图了解一下文本文件是如何编译成二进制格式的。

如何区分静态链接库和动态连接库

【静态链接库】是指在编译的连接阶段将库函数嵌入到应用系统程序的内部。但是如何多次调用,则库函数会被调用很多次,造成极大的空间浪费。他的优势在于,应用程序可以独立运行,因为静态连接的时候已经将所需的组件都已经加载到应用程序中,不需要对于的.a、.lib文件。

静态库对于库函数的连接是放在编译时期完成的。Linux静态库命名规则,必须是lib[your_library_name].a :lib为前缀,中间是静态库名,扩展名为.a. 可以通过ar工具将目标文件打包成.a静态库文件。

【动态链接库】会将公用的库函数以及相关组件都存放在一个地方,只是将地址信息告诉连接器,只有应用系统在调用该动态库时才会加载到内存。其缺点是应用程序不能独立运行,需要操作系统中安装对应的dll以及运行环境。优点是可执行文件较小。动态库后缀一般为.so、.dll。