【问题标题】:ld warning: stack subl instruction is too different from dwarf stack size on OS Xld 警告:stack subl 指令与 OS X 上的 dwarf 堆栈大小相差太大
【发布时间】:2017-01-28 15:02:28
【问题描述】:

最近我们开始在我们的 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

【问题讨论】:

    标签: c++ macos linker clang dwarf


    【解决方案1】:

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

    它正在构建为 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 是问题所在。

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

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

    【讨论】:

    • 我们没有使用 Xcode IDE,而是使用 makegcc 驱动程序从命令行编译。
    • 另外,我们对 x86 (-arch i386) 版本发出此警告,而不是 x64 (-arch x86_64) 版本。
    猜你喜欢
    • 1970-01-01
    • 2017-04-01
    • 2012-04-30
    • 2014-06-09
    • 1970-01-01
    • 2023-04-10
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多