Linux库文件的创建与使用
时间: 2024-02-12 07:34:50 浏览: 35
Linux库文件可以分为静态库和动态库两种形式。静态库的文件名通常以“.a”结尾,而动态库的文件名通常以“.so”结尾。
### 静态库
静态库是一组函数和数据的集合,它们被打包成一个单独的文件,与程序一起链接并在程序运行时加载到内存中。静态库在程序编译时就被链接到可执行文件中,因此它们不需要在运行时再次加载到内存中。
#### 创建静态库
1. 编写源代码文件,例如 `mylib.c` 。
2. 编译源代码文件,生成目标文件 `mylib.o` :
```
gcc -c mylib.c -o mylib.o
```
3. 将目标文件打包成静态库文件 `libmylib.a` :
```
ar rcs libmylib.a mylib.o
```
其中,`ar` 是一个用于创建、修改和提取归档文件的工具,`rcs` 分别表示创建、替换和添加目标文件到归档文件中。
#### 使用静态库
在编译程序时,需要指定要使用的静态库文件。例如,编写一个使用 `mylib` 静态库的程序:
1. 编写源代码文件 `main.c` ,包含 `mylib.h` 头文件:
```c
#include <stdio.h>
#include "mylib.h"
int main() {
int result = add(1, 2);
printf("The result is %d\n", result);
return 0;
}
```
2. 编译源代码文件,链接 `libmylib.a` 静态库:
```
gcc main.c -L. -lmylib -o main
```
其中,`-L.` 指定要搜索的库文件路径为当前目录,`-lmylib` 指定要链接的静态库文件名为 `libmylib.a` 。
### 动态库
动态库也是一组函数和数据的集合,但它们与程序不是在编译时就被链接,而是在程序运行时动态加载到内存中。因此,动态库的优点是可以节省内存空间,多个程序可以共享同一个动态库。
#### 创建动态库
1. 编写源代码文件,例如 `mylib.c` 。
2. 编译源代码文件为共享目标文件 `libmylib.so` :
```
gcc -shared -fPIC mylib.c -o libmylib.so
```
其中,`-shared` 表示生成共享目标文件,`-fPIC` 表示在编译时生成位置独立的代码。
#### 使用动态库
在编译程序时,需要指定要使用的动态库文件。例如,编写一个使用 `mylib` 动态库的程序:
1. 编写源代码文件 `main.c` ,包含 `mylib.h` 头文件:
```c
#include <stdio.h>
#include "mylib.h"
#include <dlfcn.h>
int main() {
void *handle = dlopen("./libmylib.so", RTLD_LAZY);
if (!handle) {
printf("Failed to load library.\n");
return 1;
}
int (*add)(int, int) = dlsym(handle, "add");
if (!add) {
printf("Failed to find symbol.\n");
return 1;
}
int result = add(1, 2);
printf("The result is %d\n", result);
dlclose(handle);
return 0;
}
```
2. 编译源代码文件,链接 `libdl.so` 动态库:
```
gcc main.c -ldl -o main
```
其中,`-ldl` 指定要链接的动态库文件名为 `libdl.so` ,它是用于动态加载库文件的标准Linux动态库。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)