文件是为存档而build立的,而不是被链接的架构(i386)

我得build立静态库。 我想用我的iPhone和iPad应用程序。 当我尝试运行模拟器时,我得到连接错误。 我是iOS开发新手。 善意帮助;

ld:警告:忽略文件/Users/valuelabs/Desktop/DruvaProject/libraries/libnetUtils.a,文件是为了归档而构build的,而不是被链接的体系结构(i386)架构i386的未定义符号:
“_OBJC_CLASS _ $ _ netUtils”,引用自:ViewController.o中的objc-class-ref ld:符号(s)找不到体系结构i386 clang:error:linker命令失败,退出代码1(使用-v查看调用)

我尝试在架构中添加i386。 但没有运气

经过与同样的问题奋斗,并按照所有接受的更新构build设置的答案,清除链接器的searchpath等。我终于发现了一个为我工作的答案。

在构build之前,请确保您select正确的types(iPhone模拟器)而不是iOS设备。 然后重build。 否则,你正尝试在Mac(i386)的模拟器上使用为iOS设备(arm处理器)构build的库。 应该是显而易见的,但不是。

之前:

iOS设备设置

后:

iPhone 5.1模拟器设置

现在,查看Navigator中的Products组>右键单击静态库(.a文件)> Show in Finder,您会注意到它在Debug-iphonesimulator文件夹中而不是Debug-iphoneos。 我最初没有注意到文件夹名称,或者我可能早点想到这个。

希望这可以帮助。

有时这些types的错误刺激你!

删除派生数据适用于我:

步骤来解决

1)在XCODE> Windows>项目>select您的项目>删除派生数据>退出XCODE并重新打开>如果您获得MAC-O-Linker builed失败错误>引用此链接>再次清理和生成。

您的libnetUtils.a正在为不同于您的目标的体系结构而构build。

检查libnetUtils构build设置。 它正在构build的体系结构及其支持的体系结构列表必须是目标体系结构的(弱)超集。 这里的复杂性是由此产生的架构遍布各种设置:“架构”,“仅build立主动架构”和“有效架构”。

“仅build立主动架构”设置使这个特别混乱。 例如,假设您正在为模拟器构build。 如果Debug的“Build active architecture only”设置为NO,那么将会构build“架构”和“有效架构”(可能是armv7等)中列出的所有架构。 但是,如果libnetUtils将该设置设置为是(debugging:是),那么它只适用于i386。 所以当你的链接器试图链接armv7与i386,它失败。

如果我得到忽略文件的警告 – 我会运行lipo -info忽略的文件来find它的架构如下

 lipo -info libnetUtils.a 

这将打印i386,armv6,armv7,armv7s,x86_64等。通常,该体系结构必须与您的目标构build平台相匹配。 例如

  • i386 = IOS模拟器或32位版本的Mac OS X上
  • armv6 armv7 arm7s = ios设备
  • x86_64 =在Mac OS上构build64位x

根据不匹配情况,您必须重新构build目标平台的库或更改目标平台。

注意:对于胖二进制文件, lipo -info将打印上述体系结构的组合。

我实际上不知道我的build议是否正确,但请尝试检查:

  • select你的项目
  • select“生成设置”
  • 检查架构:
    • 有效的体系结构应该是“armv6 armv7”
    • 支持的平台应该是“iphonesimulator iphoneos”(也许iPad,我不知道)
    • 基础SDK – 你的iOS SDK(我有iOS 5.0)。

如果我是队长,不要评价我:)

这意味着你正在尝试使用的库不是为iOS模拟器进行通用编译的(i386符号适用于Mac)。 在实际的设备上运行它应该可以正常工作。

有同样的问题,并试图从页面的多样化解决scheme无济于事。 我仍然有一个消息告诉我,我的图书馆不是为arm64构build的。

最后我是如何解决它的:

  • 在文本编辑器中打开该库的project.pbxproj
  • searchVALID_ARCHS
  • 发生4次,其中2次不包含arm64
  • 我在链中手动添加了arm64(VA​​LID_ARCHS =“arm64 i386 armv7 armv7s”)
  • 重build这个lib,这是没问题的

似乎XCode显示的构build设置有时是不完整的,并不完全对应于项目文件。

当我们在设备上运行应用程序时,这个问题不会发生。 您可以通过在iOS设备上运行代码来检查它。

我也有一个armv7的架构。 我删除了它,并确保armv6和armv7是唯一列出的两个。 它现在有效