旧警告:堆栈子指令与OS X上的矮人堆栈大小差异太大
ld warning: stack subl instruction is too different from dwarf stack size on OS X
最近我们在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位。要解决这个问题,你需要做两件事之一:
- 使用64位版本的xCode工具链而不是32位一。
- 在编译期间提供适当的选项,以便发出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。我希望它对你有帮助。
相关文章:
- 警告处理为错误这里有什么问题
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- cppcheck在const std::string[]上引发警告
- GCC对可能有效的代码抛出init list生存期警告
- 如何在BST的这个简单递归实现中消除警告
- 关于std::move的使用,是否有编译警告
- g++ 在某个类成员未初始化时不发出警告
- 算法问题:查找从堆栈中弹出的所有序列
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 使用typeid警告未使用的变量
- 警告#13212:引用需要堆栈对齐功能的EBX
- Visual Studio 2008 运行时堆栈溢出警告,当运算符在所有路径上<递归时警告
- 使用mysql C API准备语句的c++中的堆栈损坏警告
- 强制c++编译器对一个对象的所有堆栈实例发出警告
- 旧警告:堆栈子指令与OS X上的矮人堆栈大小差异太大
- 如果局部堆栈变量是未定义的行为,为什么编译器会发出有关返回对局部堆栈变量的引用的警告
- Valgrind几乎对所有内容都给出了错误(警告:客户端切换堆栈?)
- 有关堆栈大小的警告消息