XCode 6.1 中外部库文件缺少所需的 X86_64 架构

5

在尝试使用外部库时,我遇到了一个问题:编译项目时会抛出以下异常。

ld: 警告: 忽略文件 /Users/renaudcousin/Documents/XCode/WORK/StimShopPOC/StimShopPOC/libStimshop_SDK.a,文件 /Users/renaudcousin/Documents/XCode/WORK/StimShopPOC/StimShopPOC/libStimshop_SDK.a 缺失所需的架构 x86_64 (3 个切片) 未定义符号以 x86_64 为架构: "_OBJC_CLASS_$_StimshopSDK",源自: ViewController.o 中的 objc-class-ref ld: 找不到符号(符号)以 x86_64 为架构 clang: 错误: 链接器命令失败,退出代码 1(使用 -v 查看调用)`

我尝试了很多在stackoverflow上找到的解决方案(但是针对的是XCode 5.1,而且没有很好地解释),但没有任何改变...

我还发现了这个主题XCode 6.1 Missing required architecture X86_64 in file,它与我的问题完全相符。当使用lipo -info命令查看我的库的体系结构时,似乎缺少i386x86_64。我该如何将它们添加到我的库架构中以便编译?

你有那个库的源代码吗?如果有,你就可以通过包含新的架构来重新编译它,否则不行。 - Anil Varghese
不,这是另一个开发者的库,所以我无法重新编译它。 - Renaud Cousin
4个回答

11
这意味着你的 .a 库中不包含 x86_64 架构(您可以运行 lipo -info /path/to/your/lib.a 进行验证)。如果您没有库的源代码,则必须修改自己的项目。在构建设置中,将 valid architectures 更改为 armv7i386,或者仅更改 Architecturesarmv7。但是这样做会导致您的项目无法编译到 arm64 架构,而上传到 App Store 后需要 arm64 架构,苹果公司在2015年2月之后宣布过。
如果您的库中不包含 x86_64 架构,那很可能也不包含 arm64 架构。因此,应避免使用旧的库。

我知道,我已经测试了 lipo -info 命令,它缺少 i386x86_64 架构。 但是我无法避免使用这个库,这是我的经理要求创建原型应用程序! - Renaud Cousin
还尝试将“valid architecture”设置为“armv7”和“i386”,或将“architecture”设置为“armv7”,但这只会改变我的问题,因为我的库不包括“i386”架构。 - Renaud Cousin
如果.a文件不包含i386和x86_64架构,它就无法链接到iPhone模拟器使用的应用程序。在这种情况下,无论你做什么,当你尝试为模拟器编译时都会得到编译器错误。你唯一能做的就是要求一个x86版本,或者在你的真实设备上调试你的应用程序。 - Henry H Miao
你应该注意到iPhone模拟器使用的是x86架构,而不是arm架构。 - Henry H Miao
是的,谢谢。这就是我看到的。但是现在我正在尝试直接在设备上编译,总是会出现一些架构错误...我正在等待库的开发者发布新版本。感谢大家的回复 :) - Renaud Cousin

7

如果一个库没有X86_64架构,您可以在选择连接设备而不是模拟器作为构建目标后进行构建。

基本上,您仍然可以构建和开发,但无法使用模拟器。


3

点击您的项目 > 构建设置 > 架构。将架构更改为armv7并删除其他架构,如armv6、等等,然后它就能正常工作了:- 需要更改的图像


1
在构建libStimshop_SDK.a的项目中,请确保“Architectures”设置为$(ARCHS_STANDARD),并且包含编译器设置中的64位设置。请确保“Valid Architectures”设置也包括64位。

我已经尝试过了,但它并没有改变任何东西。还尝试了 ARCHS_STANDART_INCLUDING_64_BITS 和添加 armv7s - Renaud Cousin
libStimshop_SDK.a是否作为子项目构建,以便在应用程序构建时一起构建?如果没有,则必须创建一个“fat”二进制文件,详见此处:https://dev59.com/LGMk5IYBdhLWcg3wvQYU 注意:两个项目需要具有相同名称的配置。 - Walt Sellers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接