【问题标题】:Xcode 10 static library doesn't include x86_64 archXcode 10 静态库不包含 x86_64 架构
【发布时间】:2019-07-14 08:45:59
【问题描述】:

我正在构建一个静态库以用于我正在处理的另一个项目,最终它将包含在我正在开发的框架中。当我将库引入我的项目时,arm 构建工作正常,但模拟器构建失败,缺少 x86_64 构建的符号。我已将库中的构建架构设置为

arm64 arm64e armv7 armv7s x86_64

我尝试了各种设置,例如 $(ARCHS_STANDARD) 无济于事。我还尝试了所有可以在 SO 上找到的潜在解决方案,其中大部分都相当陈旧。

我们将不胜感激任何和所有建议。

【问题讨论】:

  • 您必须分别为每个架构构建,然后将它们一起放入一个胖二进制文件中。参见例如 agilewarrior.wordpress.com/2016/12/22/…medium.com/@hassanahmedkhan/…
  • 第一个链接与我的问题密切相关,但不幸的是它不起作用。帖子上的日期是 2016 年 12 月,所以我假设它是指 Xcode 9。我确实在派生数据文件夹中找到了它创建的库,它是另一个库的两倍,但我仍然收到链接器错误。我将尝试手动 lipo 它创建的文件并在此处报告。
  • 手动 lipo 确实有效。必须修改链接中提供的脚本以防止错误(从末尾的 cp 行中删除“include”),但它仍然没有构建通用文件。必须完成手动脂。 @matt,如果您将您的评论作为答案发布并引用此评论,我将接受它作为答案。
  • 我不明白为什么这不是重复的。您说“我还尝试了所有可以在 SO 上找到的潜在解决方案”,但显然这不是真的,因为调用 lipo -create 是其中一种解决方案。

标签: static-libraries xcode10 ios12


【解决方案1】:

如 cmets 和编辑中所述,您必须构建一个胖库,但所有答案中都缺少步骤,其中许多已严重过时。希望这会有所帮助。

  1. 为 iPhoneOS 和 iPhoneSimulator 构建一个静态库版本。
  2. 在命令行上,cd 到项目的派生数据目录。
  3. 您将看到操作系统和模拟器库的目录。
  4. 如下执行lipo命令

    lipo -create -output [所需的胖库名称] [iPhoneOS 库的路径] [iPhoneSimulator 库的路径]

  5. 将 fat 库从 finder 拖到您的目标项目中。

您可能可以使用构建脚本自动执行此操作,但我在最后期限之前,因此构建和拖动会更快。如果您想出了一个好的脚本,请随时在此处发布。

附: Agile Warrior 帖子中提供的脚本不起作用。

【讨论】:

    猜你喜欢
    • 2015-03-22
    • 2010-12-26
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多