ld警告:stack subl指令与OS X上的dwarf堆栈大小有太大的不同

Igo*_*sky 8 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
Run Code Online (Sandbox Code Playgroud)

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

我们的工具链来自Xcode 7.3.1:

Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.6.0
Run Code Online (Sandbox Code Playgroud)

nor*_*nny 3

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

\n\n

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

\n\n
    \n
  1. 使用 64 位版本的 xCode 工具链而不是 32 位\n。
  2. \n
  3. 在编译期间提供正确的选项以发出 x86_64\n代码
  4. \n
\n\n

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

\n\n

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

\n\n

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

\n\n

最后,尝试针对 64 位架构进行编译。为此,您可以-arch在您的案例中使用编译器选项 \xe2\x80\x93指定体系结构-arch x86_64。\n。

\n\n

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

\n\n

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

\n\n
\n

在项目“构建设置”中找到“构建选项”并在选项中设置“否”\n“启用位码”。我希望它对你有帮助。

\n
\n