linux下静态和动态链接库的生成

静态链接库

1)  先将.c文件编译成.o文件  例:gcc –c add.c

2)  用ar命令生成静态库  例:ar –rc libadd.a add.o

3)  注意:静态库命令规则为 lib+名字.a

4)  注意使用该静态文件时,在编译时,要通过-I和-L指定对应的头文件和库文件的路径


动态链接库

1)  使用命令 gcc –fPIC –shared –o libadd.so add.c将源文件编译成动态链接库

2)  使用该动态文件时,在编译时,把该文件位置加在命令后面,如 gcc –o test test.c –ldl ./libadd.so;或将libadd.so复制到/usr/lib中,然后执行gcc –o test test.c –ldl libadd.so

或gcc -o test test.c -ladd ;-l 用于指定程序要链接的库,-l加库名即可,-l会自动识别库文件,优先链接动态库,如-lusb,实际上链接的是libusb.a或者libusb.so;一般在/lib /usr/lib  /usr/local/lib 三个目录中查找

在这里说明一下库名和库文件名,库文件名为库文件在库中的真实名字,比如libadd.so;而对应的库名就是"add",要链接该库文件,只需要添加编译参数-ladd即可

3)  多个库文件链接的问题:依赖其他库的文件一定要放到被依赖库的前面

4)  C++代码中链接C语言的库,在链接C库的C++文件中,把与C语言库相关的头文件包含添加一个extern “C”声明即可

5) 使用ldd命令可以查看程序依赖的动态库,比如ldd test


-l -L -I三个编译参数

1)  -l 用于指定程序要链接的库,-l加文件名即可;一般在/lib /usr/lib  /usr/local/lib 三个目录中查找

2)  -L 用于指定动态库文件的位置,可以用相对路径

3) -I 用于指定头文件的位置,可以用相对路径

加载动态库与静态库在编译时参数没有区别,优先加载动态库,可以使用-static强制使用静态库



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值