iOS 14 链接模块标志 'Dwarf Version' : IDs have conflicting behaviors

标签 ios clang ios14 xcode12 lto

我正在尝试使我的应用程序与 iOS 14 (Xcode 12.3) 兼容。构建在链接阶段失败,并出现以下错误:

ld: linking module flags 'Dwarf Version': IDs have conflicting behaviors in 'xxx.o' and 'ld-temp.o'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我在下面搜索了解决方案。解决方案是关闭 Link-Time Optimization 或将 Link-Time Optimization 从 Monolithic 更改为 Incremental。
https://stackoverflow.com/questions/39125409/xcode-8-beta-6-conflicting-values-for-architecture
https://github.com/facebook/facebook-ios-sdk/issues/1560
我尝试将链接时间优化从整体更改为增量,它解决了我的问题。所以我的问题是:
  • 有人知道如何调试这种链接冲突问题的根本原因吗?
  • 为什么在使用 iOS 14 而不是在以前的版本中构建时会发生这种链接冲突问题?
  • 改变 LTO 是唯一的解决方案吗?
  • 最佳答案

    我有同样的问题。就我而言,xxx.o 是一个编译为位码的库。我分析了库中的 .o 文件,它们既没有 coff 也没有男子气概的文件。相反,它们被包装成 bc 文件。见 https://llvm.org/docs/BitCodeFormat.html
    您可以使用文件来分析它。
    问题是位码文件的调试信息存储为 Dwarf-2,而 .o 文件确实有 Dwarf-4。添加-gdwarf-2选项没有用,因为llvm首先编译成bitcode,也就是dwarf2。
    修复方法是使用 llc 将包装的 bc 文件的 .o 文件转换为真正的 .o 文件。如果您有一个库,它会变得有点复杂,您需要先从库中提取包装好的 .o 文件,将它们转换为真正的 .o 文件并创建一个新库。

    关于iOS 14 链接模块标志 'Dwarf Version' : IDs have conflicting behaviors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65733396/

    相关文章:

    ios - UICollectionView reloadData 更改单元格顺序

    clang - 如何在 Clang AST 中获取 OpaqueValueExpr 的子级

    c - llvm:如何生成避免基于 RIP 的寻址模式的 x64 代码?

    swift - iOS 14 WidgetKit 意图

    ios - Xamarin.iOS 应用程序在 iOS 14.0 中询问本地网络权限

    swiftui - AppStorage 与 CoreData

    php - NSURL请求:EXC_BAD_ACCESS

    objective-c - iOS - 为圆角矩形创建 UIView 子类

    c++ - 此目标不支持 VSC 运行代码分析 __float128

    IOS 在字符串中设置错误消息以在警报中显示