ld警告:stack subl指令与OS X上的dwarf堆栈大小差异

时间:2016-09-20 15:36:46

标签: c++ macos linker clang dwarf

最近我们开始在OS X版本上收到此警告。

ld: warning:
could not create compact unwind for __Z10createMenuv: stack subl instruction is too different from dwarf stack size
ld: warning:
could not create compact unwind for __Z10del_modulejb: stack subl instruction is too different from dwarf stack size
could not create compact unwind for __Z14menu_patchbytev: stack subl instruction is too different from dwarf stack size

我可以在Chromium bug跟踪器中找到对此的一些讨论,但建议的“修复”是禁用紧凑的展开生成。我想了解为什么会出现这种警告,以及它是否在我们的代码或工具链中出现问题。

我们的工具链来自Xcode 7.3.1:

Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.6.0

1 个答案:

答案 0 :(得分:1)

在进行一些研究时,我发现最好的答案是工具链存在问题,而不是具体的代码。

它正在构建为32位而不是64位。要解决这个问题,您需要做以下两件事之一:

  1. 使用64位版本的xCode工具链而不是32位 之一。
  2. 在编译期间提供适当的选项以发出x86_64 代码
  3. 这就是为什么有人建议放松,但我没有看到任何选项来抑制关于紧凑放松的警告。似乎只有一个选项可以启用警告-warn_compact_unwind

    您可以做的是禁止向编译器传递-Wl,-w选项的所有链接器警告。

    您可以尝试的另一个临时解决方案是将-Wl,-no_compact_unwind传递给clang。它应该指示链接器不生成紧凑的展开信息。

    最后,尝试编译64位架构。为此,您可以使用-arch编译器选项指定体系结构 - 在您的情况下为-arch x86_64

    我看到大多数用户指向Xcode 7,有时Xcode 6是问题构建。

    此外,还有另一种方法可以解决此问题。

      

    在项目构建设置中,找到构建选项并在选项中设置否   启用Bitcode。我希望它对你有所帮助。