2009-02-16 2 views
0

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

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

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

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

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

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

Спасибо

ответ

1

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

-mstackrealign

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

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

+0

Спасибо за ответ. Однако в этом случае это не является причиной, хотя это помогло обнаружить исправление. По какой-то причине удаление NDEBUG из флагов C в режиме Release устранило проблему даже без опции -mstackrealign. Однако я не понимаю, почему. – Alex

+0

Nevermind :) Я забыл добавить этот флаг для выпуска версий моих библиотек C++. Большое спасибо, ваш ответ помог найти проблему. – Alex

Смежные вопросы