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

11

最近我们在 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错误跟踪器中可以找到这方面的一些讨论,但建议的“修复”是禁用紧凑展开生成。我想了解为什么会出现这个警告,以及它是否是我们代码或工具链中的问题。

我们的工具链来自Xcode 7.3.1:

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

3

在进行一些调研后,我发现问题出在工具链上而非你的代码本身。

它正在以32位而不是64位构建。为了解决这个问题,你需要采取以下两种措施之一:

  1. 使用64位版本的xCode工具链而不是32位的版本。
  2. 在编译时提供正确的选项以便产生x86_64代码

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

你可以通过向编译器传递-Wl,-w选项来抑制所有链接器警告。

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

最后,请尝试针对64位架构进行编译。为此,你需要使用-arch编译器选项指定体系结构,例如:在你的情况下-arch x86_64

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

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

在项目生成设置中找到生成选项,并将选项“启用位码”设置为“No”,希望对你有所帮助。


1
我们不使用Xcode集成开发环境,而是通过命令行使用makegcc驱动程序进行编译。 - Igor Skochinsky
1
此外,我们针对 x86 (-arch i386) 构建发出此警告,而不是 x64 (-arch x86_64) 构建。 - Igor Skochinsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接