iOS开发中使用静态库 .a 文件
iOS开发中,在使用一些第三方库时,可能是一个静态库(比如GPUImage)。这种情况下,需要编译出静态库文件(.a) ,然后配合响应的头文件(.h 文件)使用。
编译静态库,直接在Xcode中编译即可,有一个细节需要注意。
平常的开发调试中,我们既可以用模拟器调试,也可以用真机调试。实际上,模拟器和真机的处理器是不同的,这也导致了基于真机的静态库文件不适用于模拟器。倘若只是生成了基于真机的静态库文件,当改为模拟器运行时,会提示类似 .a file was built for archive which is not the architecture being linked (i386) 的错误。
解决方法:
使用 lipo 命令,我们可以查看一个静态库对处理器架构的支持。比如:
可以看到基于模拟器的静态库文件和基于真机的静态库文件对处理器的支持是不同的。
生成基于真机的静态库文件: 运行时,选择设备为真机。
生成基于模拟器的静态库文件:运行时,选择设备为模拟器。
生成后的目录结构:
为了在开发中方便,通常情况下会将这两个静态库文件合并成一个静态库文件,方法是使用 lipo -create iphone.a simulator.a -output save.a ,其中 iphone.a、simulator.a、save.a 分别代表真机的静态库文件、模拟器的静态库文件、合并后静态库保存的路径。
查看合并后的静态库文件对处理器的支持情况,如下:
可以看到,既支持 x86_64,又支持 arm64。
在我们自己的工程中使用合并后的 .a 文件以及相应的头文件,就可以在模拟器和真机上都顺畅运行了。