linux动静态链接库问题

1 linux动静态库是什么?

一些代码生成为代码包,供其它程序调用,即是动静态库。动静态库都不是可执行文件,而是由源文件编译而成。

linux下,静态函数库(对应为.a文件)、共享函数库(动态库,对应为.so文件)。

.a文件类似于windows的.lib文件、.so文件类似于windows的.dll文件(Dynamic Link Library),中间编译文件.o文件相当于windows里的.obj文件。


2 动静态库的区别

静态库和动态库是两种共享程序代码的方式,它们的区别是:

(1)静态库在程序的链接阶段被复制到了目标程序代码中,程序运行时将不再需要该静态库;

(2)动态库在链接阶段,并不会被链接到目标程序代码中,而是程序在运行时由系统动态加载到内存中供程序调用,因此在程序运行时还需要动态库的存在。

使用动态库的优点是系统只需载入一次动态库,不同的程序可以得到内存中相同的动态库的副本,因此节省了很多内存。


3 库的使用 

若库名叫libsomething.a,链接的时候,加上编译选项-lsomething。

例如:数学库为libm.a,则加上编译选项是-lm。

 

4 linux库文件的生成

(1)生成.so文件:

$gcc test_a.c test_b.c -fPIC -shared -o libtest.so

$gcc test.c -L. -ltest -o test

-shared  指定生成动态链接库

-fPIC      表示编译为位置无关的代码

-L.          表示要连接的库在当前目录下

-ltest      编译器查找动态连接库时有隐含的命名规则



.so文件也是ELF格式的文件。

$gcc -g -fPIC -c src.c -o libsrc.o

$gcc -g -shared-WI,-soname,libsrc.so -o libsrc.so libsrc.o -l<?


(2)生成.a文件

$gcc -o fun.o fun.c

$ar -rc fun.a fun.o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值