【问题标题】:Undefined symbols ___llvm_profile_runtime未定义的符号 ___llvm_profile_runtime
【发布时间】:2020-01-27 09:21:42
【问题描述】:

从使用 SwiftUI 的 Xcode 11 开始,在单元测试中启用代码覆盖并让预览工作看起来非常困难/没有办法。

这就是我所做的:

  1. 选择目标 -> 在 Xcode 中编辑方案
  2. 选择Test标签并在Options标签下选择Gather coverage for some targets(仅选择主要目标)
  3. 转到 SwiftUI 文件并预览停止工作并出现以下错误。请注意,您仍然可以正常使用构建选项。

这是错误:

linker command failed with exit code 1 (use -v to see invocation)
    
failedToBuildDylib: ld: warning: directory not found for option '-F/Applications/Xcode.app/Contents/SharedFrameworks-iphonesimulator'
Undefined symbols for architecture x86_64:
  "___llvm_profile_runtime", referenced from:
      ___llvm_profile_runtime_user in Pods_RadioDemo(Pods-RadioDemo-dummy.o)
     (maybe you meant: ___llvm_profile_runtime_user)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

为了摆脱这个问题,我可以关闭代码覆盖。显然这不是我要找的。请告诉我如何在预览和代码覆盖工作的情况下进入完美世界。

只是一点参考是here。好人蒂姆姆对一个非常相似的问题有一些见解。

【问题讨论】:

    标签: xcode swiftui code-coverage preview


    【解决方案1】:

    我也被这个问题困扰。 要解决此问题,您可能需要将-fprofile-instr-generate 添加到Build Settings > Linking > Other Linker Flags

    此标志是用于覆盖输出的选项。在我的环境中使用此设置,我在启用覆盖的同时成功启用了预览。

    【讨论】:

    • 你是怎么找到这个标志的?
    • 报错内容表示无法调用coverage运行时库。因此,我们考虑添加一个标志来启用覆盖。换句话说,此标志用于链接覆盖运行时库。
    • 我应该如何使用这个标志?我尝试将此标志添加到我的主要目标以及我正在使用框架的目标中,但没有任何效果。
    【解决方案2】:

    我在一个 Objective-C 项目中遇到了类似的 ___llvm_profile_runtime_user 错误。

    这是因为我的应用程序使用的其中一个框架是在启用代码覆盖率的情况下构建的。 (它是单独构建的,带有“调试”配置。它不是由当前项目/工作区构建的。)

    我通过在应用程序的方案中打开相同的设置让 Xcode 感到高兴: 编辑方案 -> 测试 -> 选项 -> 代码覆盖率

    【讨论】:

    • 在我的例子中,在当前目标上启用代码覆盖后,这个错误就消失了。谢谢! :-)
    • d= (◕‿↼ ) 我只是从我的静态库中删除了 -fprofile-instr-generate 标志,但我测试过(在那之前),这也有效。
    猜你喜欢
    • 2018-12-12
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 2019-05-13
    • 2012-12-21
    • 2012-05-29
    相关资源
    最近更新 更多