文件是为存档而构建的,而存档不是被链接的体系结构(i386)

我得建一个静态库。我想在我的 iPhone 和 iPad 应用程序中使用。当我尝试运行模拟器,我得到链接错误。我是 iOS 开发的新手。善意的帮助;

Ld: 警告: 忽略文件 /Users/valuelabs/Desktop/DruvaProject/library/libnetUtils.a,文件 是为了存档而建的,而不是为了连接架构 (i386)架构 i386的未定义符号:
“ _ OBJC _ CLASS _ $_ netUtils”,引自: 在 ViewController.o ld 中的 objecc-class-ref: 在架构 i386中找不到符号 clang: error: 链接器命令失败,退出代码为1 (使用-v 查看调用)

我试过在架构中加入 i386,但没有成功

75856 次浏览

这意味着您正在尝试使用的库不是普遍为 iOS 模拟器编译的(i386符号是为 Mac 编译的)。不过,在实际设备上运行它应该没问题。

我不知道我的建议是否正确,但试着检查一下:

  • 选择您的项目
  • 选择“生成设置”
  • 检查架构:
    • 有效的架构应该是“ armv6 armv7”
    • 支持的平台应该是“ iphone 模拟器 iphoneos”(也许是 iPad,我不知道)
    • Base SDK-your iOS SDK (我有 iOS 5.0)。

不要评判我,如果我是船长明显:)

在与同样的问题作斗争之后,按照所有接受的答案更新构建设置,清除链接器搜索路径,等等。我终于找到了一个适合我的答案。

在构建之前,确保选择正确的类型(iPhone Simulator)而不是 iOS 设备。那就重建。否则,您将尝试在 Mac (i386)上的模拟器上使用为 iOS 设备(手臂处理器)构建的库。应该很明显的,但是没有。

以前:

iOS Device Settings

之后:

iPhone 5.1 Simulator Settings

现在,在 Navigator > 右键单击静态库(。A file) > Show in Finder,您会注意到它位于 Debug-iphonesimator 文件夹中,而不是 Debug-iphoneos 文件夹中。我最初没有注意文件夹的名称,否则我可能会更早想到这一点。

希望这个能帮上忙。

我也有一个 ARMV7的架构。我删除了它,并确保 armv6和 armv7是仅有的两个列出。现在可以用了

您的 libnetUtils.a是为与目标不同的体系结构而构建的。

检查 libnetUtils 构建设置。它所构建的体系结构及其支持的体系结构列表必须是目标体系结构的(弱)超集。这里的复杂性在于产生的体系结构分布在各种设置上: “体系结构”、“仅构建活动体系结构”和“有效体系结构”。

“仅构建活动架构”设置使这一点特别令人困惑。例如,假设您正在为模拟器构建。如果 Debug 的“ Build active Architecture only”设置为 NO,那么它将构建“ Architecture”和“ Valid Architecture”(可能是 armv7等)中列出的所有架构。但是如果 libnetUtils 将该设置设置为 Yes (Debug: Yes) ,那么它只是在为 i386构建。因此,当您的链接器尝试将 armv7与 i386链接时,它会失败。

如果我得到忽略文件警告-我会运行 lipo -info的忽略文件,以找到它的架构如下

lipo -info libnetUtils.a

它可以打印 i386,armv6,armv7,armv7,x86 _ 64等等。通常,该体系结构必须与您的目标构建平台相匹配。例如。

  • I386 = ios 模拟器或在 mac os x 上构建的32位
  • Armv6 armv7 arm7s = ios 装置
  • X86 _ 64 = 在 mac os x 上构建的64位

根据不匹配的情况,要么必须为目标平台重新构建库,要么更改目标平台。

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

遇到了同样的问题,尝试了各种各样的解决方案,但都无济于事。 我仍然有一个消息告诉我,我的图书馆不是为 arm64而建的。

最后,我解决了这个问题:

  • 在文本编辑器中为库打开 project.pbxproj
  • 搜索 VALID _ ARCHS
  • 共有4次,其中两个不含有武器64
  • 我在链中手动添加了 arm64(VALID _ ARCHS = “ arm64 i386 armv7 armv7s”)
  • 重建自由党,一切都很好

似乎有时候 XCode 显示的构建设置不完整,并且与项目文件不完全对应。

有时候这类错误会激怒你!

为我删除衍生数据工程:

需要修复的步骤

1)在 XCODE > Windows > Project > 选择你的项目 > 删除衍生数据 > 退出 XCODE 并重新打开它 > 如果你得到 MAC-O-Linker 构建失败错误 > 参考 这个链接 > 清理和再次构建。

在设备上运行应用程序时不会发生此问题。你可以通过在 iOS 设备上运行代码来检查它。

对我来说,它是固定设置的 Build Active Architecture OnlyMultiple values,要做到这一点,你必须展开它,并设置 DebugYESReleaseNo。现在,它在我的设备上编译。

您还应该检查“生成设置”中的部署目标对于依赖项和依赖项是否相同。我注意到 iOS 13被设置为静态库目标,而 iOS 10.0被定义为使用该库的框架。切换到10.0解决了这个问题。