Xcode错误:文件是为归档而构建的,而不是链接的体系结构(x86_64)

时间:2014-10-24 18:14:32

标签: ios xcode ios-simulator static-linking

我有一个iOS Xcode项目,可以在Simulator和设备中构建并运行良好。但是,我有一个新功能,需要使用静态库(仅为ARM体系结构构建) - 这意味着它构建和在设备上运行正常,但对于模拟器,我收到此错误 -

ld: warning: ignoring file libXYZ.a, file was built for archive which is not the architecture being linked (x86_64): libXYZ.a

Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_XYXClass", referenced from: objc-class-ref in MyAppClass.o

我理解这个问题,但我仍然希望能够构建&在Simulator中运行应用程序(可能通过在Simulator中排除或禁用需要静态库的新功能)。

我尝试了以下项目设置,以便应用程序也可以为Simulator构建 -

  1. 将'架构'设置为$(ARCHS_STANDARD_INCLUDING_64_BIT)
  2. 将“仅构建活动架构”设置为“否”
  3. 没有任何效果。有什么想法我可以为模拟器构建?谢谢!

1 个答案:

答案 0 :(得分:1)

最简单的解决方案可能只是构建带有intel切片的静态存档(针对iOS模拟器SDK)以及它们的4路胖(i386 + x86_64 / iOS Simualtor和armv7 / arm64 / iOS) )。

如果无法做到这一点,请解释为什么您无法做到这一点并在http://bugreport.apple.com处提交雷达,这样我们就可以解决阻止您构建静态存档的任何问题。

如果您想在iOS模拟器版本中不使用静态存档而继续操作,则需要避免在模拟器中使用XYXClass。您可以通过执行以下操作来执行此操作:

#include <TargetConditionals.h>
#if TARGET_IPHONE_SIMULATOR
    // Do sim-specific fallbacks
#else
    // Do stuff with XYXClass
#endif

请注意,“警告:忽略文件libXYZ.a ...”消息不是致命的。这只是一个警告,你可以忽略。致命的部分是你使用XYXClass,它在x86_64中没有实现。