makefile入门_包含动态静态库的基础项目_2

动态库

动态库又名动态链接库,程序编译后,不包含动态库部分的代码,只留下相应接口,程序开始运行的时候加载动态库,动态库用于实现多个模块之间共享代码。
通过makefile,将add部分制作动态库。Linux中,动态库以lib开头,.so为后缀保存,编译和使用时其名称为中掐头去尾的部分。编译过程中,需要提供库的信息,因此需要给出库的文件地址-L给出库的文件地址。编译完成后,程序保存动态库名称和函数地址,但不包含动态库文件位置,动态库制作后,需要发布到系统制动位置,以/usr/lib/为例。编译动态库需要加-fPIC -shared,编译后将生成的.so文件复制到目标文件夹中。

libadd.so:
	gcc -fPIC -shared add.c -o libadd.so
	sudo cp -u libadd.so /usr/lib/

动态库可以通过程内的函数加载,也可以在编译时指定,以后者为例,编译时包含库要添加-l库名。

calc:calc.o libadd.so sub.o multi.o
	gcc calc.o sub.o multi.o -ladd -o calc2 

在这里插入图片描述
ps:动态库中的全局变量在多线程中无法共享

静态库

静态库又名静态链接库,是将部分代码提前编译,程序编译时将指定的静态库包含到程序内, 程序本身包含静态库的代码部分。
通过makefile将sub程序制作成静态库。Linux中,动态库以lib开头,.a为后缀保存,编译和使用时其名称为中掐头去尾的部分。编译过程中,需要提供库的信息,因此需要给出库的文件地址-L给出库的文件地址。需要先对源文件进行汇编操作 (使用参数 -c) 得到二进制格式的目标文件 (.o 格式),制作静态库需要用到ar工具。

libsub.a:sub.o 
	ar -r libsub.a sub.o 

制作静态库后,无需发布,编译程序时-lsub指令包含该静态库,同时-I指定头文件地址,-L指定库文件搜索目录

calc:calc.o libadd.so libsub.a multi.o
	gcc calc.o sub.o multi.o -ladd -lsub -o calc2 

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清欢_小铭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值