如何从Xcode构建中删除不需要的架构x86_64?

时间:2016-04-01 05:58:35

标签: ios xcode

我正在尝试重新编译其他人的代码。该代码包含对第三方库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)

现在,我知道这个库不适用于模拟器。所以我想让模拟器远离构建。我真的不了解构建目标,所以我这样做了:

enter image description here

仍然,同样的错误。我做错了什么?

Xcode 7.3

2 个答案:

答案 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_64i386用于模拟器。

可能的问题是您使用的框架是为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”并使用它。

编码愉快!