Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Запуск приложения Cocoa под otest вызывает dyld_misaligned_stack_error в режиме выпуска

Автор вопроса: AlexОтветов: 1

У меня есть проблема, с которой я боролся некоторое время.

У меня есть библиотека Cocoa, которая действует как оболочка для библиотеки C++. Библиотека C++ тестируется с помощью набора модульных тестов BOOST. Тесты выполняются нормально как в режиме отладки, так и в режиме выпуска.

Чтобы протестировать обертку Cocoa, я использую otest. Вот странная часть, тесты нормально работают в режиме отладки, но терпят неудачу в режиме выпуска. Чтобы убедиться, что это не что-то в коде, я взял содержимое тестов и скомпилировал их как отдельное приложение Cocoa, которое использует код-оболочку. Это нормально работает как при выпуске, так и при отладке.

Когда otest терпит неудачу, я получаю трассировку стека, которая не имеет большого смысла и заканчивается dyld_misaligned_stack_error.

Еще одна странная вещь, которую я заметил, заключается в том, что при запуске otest из командной строки, а не из XCode, если я указываю DYLD_LIBRARY_PATH и DYLD_FRAMEWORK_PATH на отладочную версию библиотеки C++, тесты проходят. Однако я подтвердил, что весь мой тестовый код компилируется с флагами Release.

Любая помощь будет принята с благодарностью!

Спасибо

macosobjective-ccocoa

Ответы

Ответ 1 · рейтинг 1 · diciu

Попробуйте добавить флаг -mstackrealign во флаги C в релизной версии.

-mstackrealign

Выровняйте стек при входе. На Intel x86 параметр -mstackrealign создаст альтернативный пролог/эпилог, который перестраивает стек времени выполнения. Это поддерживает смешивание устаревших кодов, которые сохраняют выровненный по 4 байта стек, с современными кодами, которые сохраняют 16-байтовый стек для совместимости с SSE.

Для справки см. справочную страницу GCC.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы