Ios Xcode错误:文件是为存档而生成的,该存档不是要链接的体系结构(x86_64)

Ios Xcode错误:文件是为存档而生成的,该存档不是要链接的体系结构(x86_64),ios,xcode,ios-simulator,static-linking,Ios,Xcode,Ios Simulator,Static Linking,我有一个iOSXcode项目,它在模拟器和设备中构建并运行良好。然而,我有一个新特性,需要使用静态库(仅为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 ar

我有一个iOSXcode项目,它在模拟器和设备中构建并运行良好。然而,我有一个新特性,需要使用静态库(仅为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
我理解这个问题,但我仍然希望能够在模拟器中构建和运行应用程序(可能通过排除或禁用模拟器中需要静态库的新功能)

我已经尝试了以下项目设置,这样应用程序也可以为模拟器构建-

  • 将“架构”设置为$(ARCHS_标准,包括64位)
  • 将“仅构建活动体系结构”设置为否

  • 什么都没起作用。有什么想法我可以建立模拟器?谢谢

    最简单的解决方案可能是在arm的基础上,使用intel切片(针对iOS Simulator SDK)构建静态归档,使其成为4路fat(i386+x86_64/iOS Simulator和armv7/arm64/iOS)

    如果这是不可能的,请解释为什么这对您来说是不可能的,并在存档雷达,这样我们就可以解决阻止您构建静态存档的任何问题

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

    #include <TargetConditionals.h>
    #if TARGET_IPHONE_SIMULATOR
        // Do sim-specific fallbacks
    #else
        // Do stuff with XYXClass
    #endif
    
    #包括
    #if TARGET_IPHONE_模拟器
    //是否有特定于sim卡的回退
    #否则
    //使用XYXClass做一些事情
    #恩迪夫
    

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

    谢谢!if/else工作得很好。静态存档是由第三方供应商提供的,我无法控制它。啊,这是有道理的。您应该要求该第三方提供一份在iOS模拟器中运行的库的副本。