2016 - 2024

感恩一路有你

如何生成静态库与动态库?

浏览量:2962 时间:2024-06-26 12:18:55 作者:采采

库是由一组目标文件聚合而成的文件,目标文件通过源文件编译得到。对于C语言,目标文件包含了若干数据结构和函数,但不能包含main函数。库有两种类型:静态库和动态库。

静态库是指在编译时将库链接进可执行文件中,每次执行程序时都会使用这个库的一个副本。动态库则在运行时加载进内存,不会像静态库那样被复制多份,因此动态库可以被多个程序共享。本文将以gcc工具为例,介绍如何生成静态库和动态库。

一、如何生成静态库

1. 准备两个源文件s1.c和s2.c,以及相应的头文件s1.h和s2.h。

2. 从s1.c和s2.c生成静态库libs12.a:

(1)执行指令“gcc -c s1.c s2.c”生成目标文件:s1.o、s2.o

(2)执行指令“ar cr libs12.a s1.o s2.o”生成静态库:libs12.a

3. 准备测试文件main.c并编译连接静态库libs12.a:

(1)执行指令“gcc -c main.c”生成目标文件:main.o

(2)执行指令“gcc -o s12.exe main.o libs12.a”生成可执行文件s12.exe

(3)执行生成的s12.exe可验证成功连接静态文件

二、如何生成动态库

1. 从s1.c和s2.c生成动态库:

(1)执行指令“gcc -fPIC -shared s1.c s2.c -o ”生成动态库:

其中-fPIC选项用于告诉编译器生成与位置无关的代码,这对于动态库非常重要。

2. 编译测试文件main.c并链接动态库

(1)执行指令“gcc -c main.c”生成目标文件:main.o

(2)执行指令“gcc -o s12 main.o -L./ -l s12”生成可执行文件s12

其中-L选项用于告诉编译器在当前目录下查找动态库,-l选项则指定要链接的库的名称,注意此处不需要写上“lib”和“.so”后缀。

(3)执行生成的s12可验证成功连接动态文件

总结:

生成静态库和动态库的方法大致相同,只是在编译时需要加入不同的参数。静态库在编译时将库链接进可执行文件中,而动态库则在运行时加载进内存,两者各自的优点和缺点需要根据实际情况进行选择。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。