合并静态库以及iOS静态库.a文件转.m文件


静态库基本知识

Cocoa平台下 有 framework 和 .a 类型,接下来我们主要分析.a类型的静态库

静态库根据包含的架构类型可以分fat和thin,一般有armv7、armv7s、arm64、arm64e等类型。

fat  包含多个架构

thin 包含单个架构
1、查看静态库架构信息
lipo -info xxx.a

2、如果是多架构类型,分离静态库架构

lipo -extract_family armv7 -output xxx.a xxxSDK.a
warmming:小心这样写是导致错误发生,这种写法针对fat文件是无法成功的。

如果出现以下信息,说明是包含多个架构的静态库,需要分离

Architectures in the fat file:  xxx.a are: armv7 armv7s

下一步:分离.a 包含的多架构

lipo xxx.a -thin armv7 -output xxx_armv7.a
lipo xxx.a -thin armv7s -output xxx_armv7s.a

而对于i386则不用上述那么麻烦,直接用第一句-extract_family指令就能分离出只含i386版本的库:

lipo -extract_family i386 -output xxx_i386.a xxx_i386.a

3.分离出目标文件(.o)

进行实质上的合并。xcode里提示duplicate symbol都是说***.o与***.o冲突。注意,只有非fat file,也就是只含有单种版本的lib库才能分离出.o文件

ar -x ../xxx_armv7.a
ar -x ../xxx_armv7s.a
ar -x ../xxx_i386.a

这一步最好是在lib*_final.a的同级目录下新建一个文件夹,专门用来接收解压出来的.o文件。同种版本(如armv7)的都解压到这个文件夹中,相同的.o文件他会自己覆盖掉。

4.从.o文件中合并成静态库
libtool -static -o ../xxx_armv7.a  *.o

5.合并成最终的通用静态库
lipo -create -output test1.a test2-i386.a test3-armv7.a test4-armv7s.a


从.a静态库文件导出.m 文件

准备一个静态库.a文件,比如我们之前制作的 xxx.a,放在桌面的test目录里。

1、打开终端:

2、cd 到 libVideoPlayerLib.a 所在的文件夹test下

cd ~/Desktop/test/

3、查看 libVideoPlayerLib.a 包含几种架构 arch 。 (file 命令)

file xxx.a

lipo -info xxx.a

4、分离出一种架构的.a。(lipo **.a -thin armv7 -output armv7.a)

lipo xxx.a -thin armv7 -output xxx_armv7.a

5、抽离.a文件的object文件.o。(ar -x armv7.a)

ar -x xxx_armv7.a

6、将.o 转换为 .m。(nm ****.o > ****.m)

nm xxx.o > xxx.m

到这里关于静态库.a 相关的知识就结束了,如果有遇到新的问题,下面再做补充!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yongtao_vip

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

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

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

打赏作者

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

抵扣说明:

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

余额充值