Запуск приложения Какао в otest вызывает dyld_misaligned_stack_error в режиме выпуска - PullRequest
0 голосов
/ 16 февраля 2009

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

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

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

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

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

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

Спасибо

1 Ответ

1 голос
/ 17 февраля 2009

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

-mstackrealign

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...