IOS静态库重新封装

IOS静态库重新封装

  • 拆分及合并静态库
    • 拆分
    • 合并
    • 切换生成release/debug
    • 没有armv7s的静态库

拆分及合并静态库

拆分

参考:
https://blog.csdn.net/xiaolei251990/article/details/82852388
https://blog.csdn.net/yiyunhzy/article/details/27523251
静态库是目标文件的简单链接,使用linux的ar拆分静态库:

ar -t xx.a // 查看有哪些.o模块
ar -x xx.a // 拆分出.o

此时报错:
xxx.a is a fat file (use libtool(1) or lipo(1) and ar(1) on it)
胖文件,应该是这个静态库是多个cpu架构的静态库组成的,使用lipo 查看并进行拆分:

lipo -info xx.a // 查看包含的cpu架构的库
lipo xx. a -thin armv7 -output xx_armv7.a // 拆分出armv7的库
lipo xx. a -thin armv7s -output xx_armv7s.a

拆分后,再使用ar即可获得.o文件。
mac上,使用:

otool -Vf xx.lib // 查看包含的cpu架构等信息

可以获得此二进制文件包含的cpu架构。

otool -tv xx.o // 查看汇编代码

查看反编译代码。

合并

用ar合并.o成.a

ar cru libABC.a *.o // 合并.o文件
ranlib libABC.a // 更新静态库的符号索引表,相当于ar -s?

得到各个类型的a后,用lipo合并成胖文件

lipo -create xx_armv7.a  xx_arm64.a -output xx.a // 合并静态库成胖文件
lipo -create 模拟器.a  真机.a -output 目标地址/最终.a

切换生成release/debug

xcode 10的菜单栏 - Product - Scheme - Edit Scheme,打开窗口,将Run - info - Build configuration改为release。

没有armv7s的静态库

xcode 10全部按默认设置,生成的静态库只有arm64,armv7,没有armv7s。
原因是targets的设置问题。(可以同时把project也改掉)

  1. Build Settings - Architectures 默认为: $(ARCHS_STANDARD),添加一项armv7s(似乎默认没有包含)
  2. 确定Vaild Architectures中要有armv7s(默认有)
  3. 确定Build Active Architectures Only里面,对应的release或debug为No(或者直接把这项设置为No)

你可能感兴趣的:(C++,iOS)