旧警告:堆栈子指令与OS X上的矮人堆栈大小差异太大

ld warning: stack subl instruction is too different from dwarf stack size on OS X

本文关键字:堆栈 警告 指令 OS      更新时间:2023-10-16

最近我们在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跟踪器中找到一些关于这个问题的讨论,但是建议的"修复"是禁用compact unwind生成。我想知道为什么会出现这个警告,如果它是我们的代码或工具链中的问题。

我们的工具链来自Xcode 7.3.1:

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

在做一些研究后,我看到最好的答案是工具链有问题,而不是你的代码。

它被构建为32位而不是64位。要解决这个问题,你需要做两件事之一:

  1. 使用64位版本的xCode工具链而不是32位一。
  2. 在编译期间提供适当的选项,以便发出x86_64代码

这就是为什么有些人建议unwind,但我没有看到任何选项来抑制紧凑unwind的警告。似乎只有一个选项可以启用警告-warn_compact_unwind

你可以做的是通过-Wl,-w选项来抑制所有的链接器警告。

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

最后,尝试为64位体系结构编译。为此,您可以使用-arch编译器选项指定体系结构—在您的示例中是-arch x86_64。.

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

除此之外,还有一个方法可以解决这个问题。

在项目生成设置中找到生成选项并在选项中设置No启用Bitcode。我希望它对你有帮助。