制作和使用库文件

本文详细解释了静态库和动态库的概念,并介绍了如何创建这两种类型的库文件。静态库是由多个object文件组成的集合,而动态库则是在编译时仅保留引用信息,在运行时加载的共享库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、静态库
静态库(static library or archive)是几个object文件的组合。假设你有两个c文件,test1.c和test2.c,先用如下命令编译这两个文件:

gcc -c test1.c
gcc -c test2.c

这样会生成两个object文件:test1.o和test2.o,再利用这两个文件来生成一个静态库文件,使用如下命令:

ar cr libtest.a test1.o test2.o

这样就生成了一个名为libtest.a的静态库文件。

再假设test1.c里面有一个函数叫做display,你的应用程序main.c可以调用这个display函数,编译的时候用如下命令:

gcc -o main main.c -L ./ -ltest

-L参数指明库的搜索路径,-l参数说明具体要链接的库。这样就可以像其他程序那样执行main可执行程序了。

2、动态库
动态库(shared library or dynamically linked library)和静态库主要有两个区别。第一个区别就是通过链接动态库编译程序时,所生成的目标代码中并不包含动态库中的代码,而只保存一个对动态库的引用信息;第二个区别就是动态库不仅仅是一些目标文件的集合,而是把几个目标文件合并成一个单独的文件,因此使用的时候不像静态库那样只链接所需要的目标文件,而是包含整个动态库文件。

同样,假设你有两个c文件:test1.c和test2.c,下面介绍如何把这两个文件编译成一个动态库文件。首先,编译test1.c和test2.c,使用如下命令:


gcc -c -fPIC test1.c gcc -c -fPIC test2.c

-fPIC命令告诉编译器test1.o和test2.o将作为动态库的一部分进行使用。PIC是指Position-Independent Code。然后将这两个目标文件组合起来,生成一个动态库文件,命令如下:

gcc -shared -fPIC -o libtest.so test1.o test2.o

这样就生成了一个名为libtest.so的动态库文件。和上面使用静态库一样的方法使用动态库,就不再介绍了。需要注意的是,执行动态链接的程序时,动态库文件所在的路径一定要包含在环境变量LD_LIBRARY_PATH当中,否则,找不到所使用的库文件时,程序不会成功执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值