静态链接与动态链接(静态链接与动态链接(Linux))
前言前言
上一篇分享了静态链接与动态链接的实验(Windows):C语言动态链接与静态链接。这一篇分享Linux下的笔记,同时对上一
篇笔记做一个补充。
首先,我们把静态链接与动态链接做一个这样子的比喻:
把链接过程看做我们平时学习时做笔记的过程。我们平时学习时准备一本笔记本专门记录我们的学习笔记,比如在某本书的某
一页上看到一个很好很有用的知识,这时候我们有两种方法记录在我们的笔记本上,一种是直接把那一页的内容全部抄写一遍
到笔记本上(静态链接);另一种是我们在笔记本上做个简单的记录(动态链接),比如写上:xxx知识点在《xxx》的xxx页。
从这两种方法中我们可以很清楚地知道两种方式的特点,第一种方式的优点就是我们在复习的时候就很方便,不用翻阅其它书
籍了,但是缺点也很明显,就是占用笔记本的空间很多,这种方法很快就把我们的笔记本给写满了。第二种方式的优点就是很
省空间,缺点就是每当我们复习的时候,手头上必须备着相关的参考书籍,比如我们去教室复习的时候,就得背着一大摞书去
复习,这样我们复习的效率可能就没有那么高了。
这对应到我们的动态链接与静态链接上是不是就很好理解了:
静态链接与动态链接的主要优缺点静态链接与动态链接的主要优缺点
((1)静态链接的优缺点:)静态链接的优缺点:
优点:优点:
代码装载速度快,执行速度略比动态链接库快;
缺点:缺点:
使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费。
((2)动态链接的优缺点:)动态链接的优缺点:
优点:优点:
生成的可执行文件较静态链接生成的可执行文件小;
缺点:缺点:
速度比静态链接慢;
动态、静态链接实验动态、静态链接实验
我们先编写如下代码(共三个文件):
文件文件1((main.c):):
#include "test.h"
int main(void)
{
print_hello();
return 0;
}
文件文件2((test.c):):
#include "test.h"
void print_hello(void)
{
printf("hello world");
}
文件文件3((test.h):):
#ifndef __TEST_H
#define __TEST_H
#include
void print_hello(void);