【问题标题】:Mac Catalyst build fails with "building for Mac Catalyst-x86_64 but attempting to link with file built for Mac Catalyst-arm64"Mac Catalyst 构建失败,出现“为 Mac Catalyst-x86_64 构建但试图链接为 Mac Catalyst-arm64 构建的文件”
【发布时间】:2021-02-28 01:37:19
【问题描述】:

更新到 Xcode 12.2 后,由于 Apple Silicon 相关的链接错误,我的项目开始无法编译。我似乎已经修复了大部分问题,但是一个构建静态链接框架的子项目给我带来了问题。然而,具有明显相同构建设置的同级子项目却没有。

在链接期间,我收到有关单一框架的警告:

ld:警告:忽略文件 ...Build/Products/Debug-maccatalyst/TCSiOSC.framework/TCSiOSC,为 Mac Catalyst-x86_64 构建,但尝试链接为 Mac Catalyst-arm64 构建的文件

我正在英特尔 Mac 上构建以启动(因此“仅构建活动架构”不是一个因素)。我找不到任何可以解决这个问题的构建设置,并且网络搜索没有发现这个确切的错误。任何想法表示赞赏!

【问题讨论】:

    标签: macos linker frameworks mac-catalyst


    【解决方案1】:

    我有同样的问题,发现了这个问题。就我而言,在 Debug 上构建成功但在 Release 上失败。原因正是“仅构建活动架构”选项。这是一个选项,可以在您的项目 - “构建设置”选项卡然后“架构”部分中找到。 “仅构建活动架构”有一个设置。默认情况下,调试模式为是,而发布模式为否。这导致我的构建在发布时失败。

    【讨论】:

    • 感谢您提供的信息!这不是我的问题,但你提醒我用我得到的解决方案更新这篇文章。
    • 非常感谢Yi Hu!!我刚刚在 Apple 相关的“Ask Different”部分发布了question about this。然后我尝试在主 stackoverflow 中更加努力地搜索并找到 Yi HuOscar 的答案。这正是我的问题,并且没有任何麻烦地解决了它!
    【解决方案2】:

    我为此咨询了 Apple,他们的工程师推荐了一些东西:

    1. 将任何 Swift 子项目变成 Swift 包,而不是嵌入式 Xcode 项目。因此,我从父项目中删除了一个库的 Xcode 项目,并将其顶级目录拖到父项目中以将其包含为 Swift 包。现在......这个特定的子项目(SQLite.swift)已经定义了一个 Swift 包。我以前没有自己生成过 Swift 包,所以我无能为力。另外,不要忘记将其添加到应用程序目标上的框架、库和嵌入式内容列表中。

    2. 进入项目的构建设置并删除“支持的平台”设置。如果您单击构建设置列表上方的“级别”按钮,您可以看到每个设置的来源。 “支持的平台”不应为粗体。突出显示该行,如果它是粗体,请按 Delete。然后进入你的目标并做同样的事情:删除“支持的平台”。

    3. 将项目(顶层)级别的 Base SDK 设置为 iOS;这是必须的。从目标层删除它,所以它继承自项目;我不知道这是否适用于多种目标或所有项目,但它对我有用。

    4. 从所有目标中删除 VALID_ARCHS 构建设置(如果存在)。该设置已弃用。

    在我的情况下,在这些更改之后,“构建活动架构”设置没有任何区别。该项目现在可以在 Catalyst 下构建和运行了。

    【讨论】:

    • 目前 CocoaPods 存在问题,即 Pods 项目的 Base SDK 默认设置为 No SDK (MacOS)。按照这里的建议将其更改为 iOS 为我解决了链接问题。
    • 很高兴听到这个消息!
    • @MaxKlint 这是否意味着 pod 的基础 SDK 与项目不同?我在哪里可以检查类似的东西?
    猜你喜欢
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 2021-07-12
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 2020-03-01
    相关资源
    最近更新 更多