我遇到了一个困扰我一段时间的问题。
我有一个 Cocoa 库,它充当 C++ 库的包装器。 C++ 库使用一组 BOOST 单元测试进行测试。测试在调试和 Release模式下均正常运行。
为了测试 Cocoa 包装器,我使用 otest。这是奇怪的部分,测试在 Debug模式下正常运行,但在 Release模式下失败。为了确保它不是代码中的内容,我获取了测试内容并将它们编译为使用包装器代码的单独的 Cocoa 应用程序。这在发布和调试下都可以正常运行。
当 otest 失败时,我得到一个毫无意义的堆栈跟踪,并以 dyld_misaligned_stack_error 结尾。
我注意到的另一个奇怪的事情是,当从命令行而不是从 XCode 启动 otest 时,如果我将 DYLD_LIBRARY_PATH 和 DYLD_FRAMEWORK_PATH 指向 C++ 库的调试版本,测试就会通过。我已经确认我的所有测试代码都是使用发布标志进行编译的。
任何帮助将不胜感激!
谢谢
最佳答案
尝试在发布版本的 cflags中添加标志“-mstackrealign”。
-mstackrealign
Realign the stack at entry. On the Intel x86, the -mstackrealign option will generate an alternate prologue/epilogue that realigns the runtime stack. This supports mixing legacy codes that keep a 4-byte aligned stack with modern codes that keep a 16-byte stack for SSE compatibility.
请参阅 GCC 的手册页以供引用。
关于objective-c - 在 otest 下运行 Cocoa 应用程序会导致 Release 模式下出现 dyld_misaligned_stack_error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/554250/