bugsiosiOS

XCode12 模拟器静态库支持arm64架构引发的系列问题

2020-09-24  本文已影响0人  Accepted_

问题一:真机模拟器库无法合并,报错:have the same architectures (arm64) and can't be in the same fat output file

XCode12之前:
编译模拟器静态库支持i386 x86_64两架构
编译真机静态库支持armv7 arm64两架构
使用lipo -create -output命令可以将两个库合并成一个支持模拟器和真机i386 x86_64 armv7 arm64四种架构的胖子库。

XCode12编译的模拟器静态库也支持了arm64,导致出现真机库和模拟器库不能合并的问题。


XCode12编译的模拟器库支持arm64架构 have the same architectures (arm64) and can't be in the same fat output file

*解决办法:

1.如果有静态库工程:

Build Settings -> Excluded Architectures里按照这样设置一下,再编译合并就不会报错了。 Excluded Architectures

2.如果手里只有.a或.framework文件
使用lipo remove命令将模拟器库的arm64架构移除

$ lipo XXX.a -remove arm64 -output XXX.a

问题二:静态库工程编译模拟器库报错ld: in XXX.a(XXXXXXX.o), building for iOS Simulator, but linking in object file built for iOS, for architecture arm64

这个是出在静态库工程中包含其他已经编译好的静态库,且该静态库是真机模拟器合并胖子库(支持四种架构)。
由于这个胖子库只支持真机的arm64但不支持模拟器arm64,所以出现了以上报错。
如果出现上述问题,也是去Build Settings -> Excluded Architectures里按照这样设置一下,再编译模拟器库就不会报错了。

Excluded Architectures

问题三:项目模拟器运行报错building for iOS Simulator, but linking in object file built for iOS

在Build Settings里User-Defined里是否有个VALID_ARCHS。看看是否有x86_64架构。没有的话填上。

*资料来源:https://www.jianshu.com/p/f1436462c825

上一篇下一篇

猜你喜欢

热点阅读