当前iOS app 一般要运行在三种不同的ARM平台上, 分别是ARMv7, ARMv7S 和 ARM64(ARMv8), 在Xcode中, 可以定义Target Architectures 为 Standard Architectures, 也就是编译器预先定义好的变量 $(ARCH_STANDARD), 这个自然包含了iOS app所需要支持的不同架构的binary库或App. 但是如果我们的程序并非用Xcode编译 而是用 GNU make 呢? 如何把多种不同架构的biarary combine 在一起呢? 答案是利用MAC OS 的Lipo 工具。
Lipo的命令格式定义如下:
lipo [-info] [-detailed_info] [-arch arch_type input_file] ... [ input_file] ... [-arch_blank arch_type] [-create] [-thin arch_type] [-replace arch_type filename] ...
[-remove arch_type] ... [-extract arch_type] ... [-extract_family arch_type] ... [-verify_arch arch_type ...] [-output output_file] [-segalign arch_type value] ...
常见的使用
1. lipo -info filename 或者 lipo -detailed_info filename
-info: 简要显示输入文件的architectures.
-detailed_info: 详细显示输入文件的architectures. 这两个options用来查看生产的文件所能支持的architecture信息。
2. lipo create -arch armv7 armv7_filename -arch armv7s armv7s_filename -arch arm64 arm64_filename -output target_filename
这个命令用来把三种不同的architecture的文件合到一个文件中, 并且这个文件支持上述三种architectures.
虽然 lipo的功能还有不少, 但是上述两种是最常用的, 掌握他们已经足够满足日常应用了。