解决 “building for iOS simulator, but linking in object file built for OSX, for architecture x86_64”
在升级XCode到版本7以后,使用某些静态库(.a文件),并为IOS模拟器编译时,可能会出现如标题所示错误,提示这个库是为OSX系统的X86_64平台编译的。这可能是XCode版本的一个BUG,在链接静态库时,优先链接了OSX平台下的obj,并抛编译错误。
为解决此问题,我们在编译静态库时,不要将添加OSX系统下的平台,或者使用lipo将静态库中关于OSX系统平台的内容移除。
首先使用 "-info"选项查看静态库里包含了哪些平台内容:
1 2 |
$ lipo -info libuuid.a Architectures in the fat file: libuuid3.a are: armv6 armv7 armv7s i386 arm64 x86_64 |
可以看到此静态库中包含了 i386和x86_64两个平台内容。然后使用 "-remove" 将其移除:
1 2 3 4 |
$ lipo libuuid.a -remove i386 -output libuuid.a $ lipo libuuid.a -remove x86_64 -output libuuid.a $ lipo -info libuuid.a Architectures in the fat file: libuuid.a are: armv6 armv7 armv7s arm64 |
使用移除OSX平台内容后的静态库再次编译,问题解决。
但是会出现warning:
"ld: warning: ignoring file ……/libuuid.a, missing required architecture x86_64 in file ……/libuuid.a (4 slices)"
可以不用理会。但是在发布或部署到真机的时候,还是需要使用带有x86_64平台的静态库。