我有一个问题,我一直在努力。
我有一个Cocoa库,它充当C ++库的包装器。使用一组BOOST单元测试来测试C ++库。测试在调试和释放模式下正常运行。
为了测试Cocoa包装,我使用的是otest。这是一个奇怪的部分,测试在调试模式下正常运行但在发布模式下失败。为了确保它不是代码中的东西我已经采用了测试内容并将它们编译为使用包装器代码的单独Cocoa应用程序。这通常在发布和调试下运行。
当otest失败时,我得到一个没有意义的堆栈跟踪,并以dyld_misaligned_stack_error结束。
我注意到的另一个奇怪的事情是,当我从命令行而不是从XCode启动otest时,如果我将DYLD_LIBRARY_PATH和DYLD_FRAMEWORK_PATH指向C ++库的Debug版本,则测试通过。我已经确认我的所有测试代码都是使用Release标志编译的。
非常感谢任何帮助!
谢谢
答案 0 :(得分:1)
尝试在发布版本的C标志中添加标记“-mstackrealign”。
-mstackrealign
在入口处重新对齐堆栈。在Intel x86上,-mstackrealign 选项将生成重新排列的替代序言/结尾 运行时堆栈。这支持混合保留的遗留代码 4字节对齐堆栈,具有保持16字节堆栈的现代代码 用于SSE兼容性。
请参阅GCC的手册页以供参考。