用makefile解决linux下静态库冲突问题

项目引入了多个三方静态库,其中包含的.o文件重名,但是幸运的是函数不重名,类不重名,因此只需要在ar时重命名.o文件即可。

makefile中:

for lib in $(THIRD_PARTY_STATIC_LIBS);\
do\
	tmp=$${lib##*/};\
	$(AR) -x $$lib;\
	find ./ -name "*.o" | awk -F "." '{print $$2}' | xargs -i -t mv ./{}.o ./{}$$tmp.o;\
	$(AR) -rcu $@ *.o;\
	ranlib $@;\
	$(RM) -f *.o;\
done

在这里插入图片描述

tmp赋值为取出文件名(第一步去除目录和第二步去除后缀)
makefile中for开始执行的是shell,所以取变量需要多加一个$转义,因为是shell,所以也无法使用notdir,basename等makefile中使用的函数,会提示找不到。
然后再将所有.o文件都批量重命名就好了(加了第三方库名称区分)

ps:静态库就是一堆.o文件的集合,每个.o会包含一些函数地址,ar -x就是将静态库.a文件解压成一堆.o文件,然后用ar -rcu将这一堆.o文件压到最终想生成的静态库.a文件,实现把多个.a文件合并成一个.a文件。
最后记得用ranlib xxx.a更新这个.a。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值