动态库和静态库的区别是什么?用代码举例说明
时间: 2023-08-13 15:32:42 浏览: 127
动态库静态库区别
动态库和静态库都是用来存储程序中需要用到的函数和变量的,它们的区别在于程序运行时加载方式不同。
静态库在编译时被链接到可执行程序中,程序运行时不需要再加载,因此占用的内存较大,但是运行速度较快。动态库则是在程序运行时才会被加载到内存中,因此占用的内存较小,但是相对于静态库来说会慢一些。
以下是一个使用静态库和动态库的例子:
首先,我们定义一个库中包含的函数:
```
// add.c
int add(int a, int b) {
return a + b;
}
```
然后,我们将这个函数编译成静态库和动态库:
```
// 静态库
gcc -c add.c
ar rcs libadd.a add.o
// 动态库
gcc -shared -o libadd.so add.c
```
接下来,我们编写一个主程序,分别调用静态库和动态库中的函数:
```
// main.c
#include <stdio.h>
// 使用静态库
//#include "libadd.a"
//int add(int, int);
// 使用动态库
#include <dlfcn.h>
void* handle = dlopen("./libadd.so", RTLD_LAZY);
int (*add)(int, int) = dlsym(handle, "add");
int main() {
int a = 1, b = 2;
printf("静态库: %d + %d = %d\n", a, b, add(a, b));
return 0;
}
```
如果我们使用静态库,需要将 `libadd.a` 文件放到当前目录并编译时取消注释 `#include "libadd.a"` 这一行即可。如果使用动态库,需要加载动态库并使用 `dlsym` 函数获取库中的函数指针,然后调用即可。
需要注意的是,在使用动态库时需要链接 `dl` 库,例如:
```
gcc main.c -ldl
```
阅读全文