objective-c - 在 otest 下运行 Cocoa 应用程序会导致 Release 模式下出现 dyld_misaligned_stack_error

标签 objective-c cocoa macos

我遇到了一个困扰我一段时间的问题。

我有一个 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/

相关文章:

iphone - 访问委托(delegate)时出现“无法识别的选择器”错误

ios - 如何使用 NSFileManager 保护或加密视频文件?

macos - NSResponder resignFirstResponder 在错误的对象上触发

objective-c - 未收到 NSWindowWillCloseNotifications

objective-c - NSPredicateEditor 不处理整数值

c++ - 线程——Mac 与 Linux

同名的 Objective-C 类别

ios - Apple TV 强制聚焦另一个 View

ios - 键值观察(KVO)与绑定(bind)(_ :to:withKeyPath:options:)

macos - OSX 中正确的 .bash_profile