动态库和静态库的使用和生成
时间: 2023-10-25 15:21:54 浏览: 61
动态库和静态库是在程序编译期间链接的库文件,用于提供可重用的代码和函数,从而节省编写代码的时间和减少代码重复。下面是它们的使用和生成方法:
1. 静态库
静态库是一种编译时链接的库文件,它会将库文件的代码和函数复制到可执行程序中。在使用静态库时,需要将静态库的文件路径和名称添加到编译器的链接器参数中,例如:
```
$ gcc main.c -L./lib -lfoo -o main
```
其中,`-L./lib` 表示将库文件所在的目录添加到链接库的搜索路径中,`-lfoo` 表示链接名为 `libfoo.a` 的库文件,`-o main` 表示将编译生成的可执行文件命名为 `main`。
生成静态库的方法如下:
```
$ gcc -c foo.c -o foo.o
$ ar rcs libfoo.a foo.o
```
其中,`-c foo.c -o foo.o` 表示将 `foo.c` 编译成目标文件 `foo.o`,`ar rcs libfoo.a foo.o` 表示将目标文件 `foo.o` 打包成静态库 `libfoo.a`。
2. 动态库
动态库是一种在运行时链接的库文件,它不会将代码和函数复制到可执行程序中,而是在程序运行时动态加载。在使用动态库时,需要将动态库的路径和名称添加到程序运行环境的搜索路径中,例如:
```
$ export LD_LIBRARY_PATH=./lib
$ gcc main.c -lfoo -o main
```
其中,`export LD_LIBRARY_PATH=./lib` 表示将库文件所在的目录添加到动态库的搜索路径中,`-lfoo` 表示链接名为 `libfoo.so` 的动态库,`-o main` 表示将编译生成的可执行文件命名为 `main`。
生成动态库的方法如下:
```
$ gcc -fPIC -c foo.c -o foo.o
$ gcc -shared -o libfoo.so foo.o
```
其中,`-fPIC` 表示生成位置无关的代码,`-c foo.c -o foo.o` 表示将 `foo.c` 编译成目标文件 `foo.o`,`-shared -o libfoo.so foo.o` 表示将目标文件 `foo.o` 打包成动态库 `libfoo.so`。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_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)