我正在尝试重新编译其他人的代码。该代码包含对第三方库myLib.a的引用,该库有两个片段:
Architectures in the fat file: myLib.a are: armv7 arm64
我收到此警告,后面是一堆链接错误:
ld: warning: ignoring file myLib.a, missing required architecture x86_64 in file myLib.a (2 slices)
现在,我知道这个库不适用于模拟器。所以我想让模拟器远离构建。我真的不了解构建目标,所以我这样做了:
仍然,同样的错误。我做错了什么?
Xcode 7.3
答案 0 :(得分:0)
您确实将架构设置为armv7,arm64,因此只需在调试模式下将Build Active Architecture Only更改为YES:
调试模式:是
发布模式:NO(默认值)
因此,在调试时,您将仅为当前设备构建
答案 1 :(得分:0)
我在这里回答了这个问题:https://stackoverflow.com/a/65307436/5303139
相同的答案
对于iOS项目,您具有以下架构:arm64
armv7
armv7s
i386
x86_64
x86_64
,i386
用于模拟器。
可能的问题是您使用的框架是为iOS构建的,而不是针对模拟器的。
要解决此问题,您可以绕过构建框架并使用lipo命令行。
第一:lipo -info [The library.framework location]
示例用法:lipo -info /Users/.../library.framework/LibrarySDK
示例输出:
Architectures in the fat file: /Users/.../library.framework/LibrarySDK are: i386 x86_64 armv7 arm64
您将获得用于该框架的体系结构列表。
第二:我们需要从模拟器架构中剥离框架,并制作该框架的2个版本(1个用于iOS设备,1个用于模拟器)
使用:lipo -remove [architecture] [location] -o [output_location]
示例:lipo -remove i386 /Users/.../SDK -o /Users/.../SDK_Output_Directory
转到您选择的输出目录以获取不删除体系结构的新生成的SDK,以验证您可以使用与上述相同的lipo -info命令
您可以在新创建的SDK上使用相同的lipo remove命令,但可以使用另一种体系结构
lipo -remove x86_64 ...
,您将获得仅适用于iOS设备的SDK
第三:获取最终的SDK,并将其重命名为“ SDK_Name_IOS”并使用它。
编码愉快!