2015-11-11 10 views
0

Я портирую библиотеку (https://github.com/uzh-rpg/rpg_svo), которая была разработана на Linux для iOS. Целевым устройством является iPhone 6 plus. На первом этапе нам удалось перенести его в Windows. Кроме того, нам удалось запустить его на симулятор xcode для iPhone. Но при попытке запустить его на iPhone приложение вылетает после нескольких циклов со следующей ошибкой:Приложение работает на симуляторе, но не iPhone 6 плюс

malloc: * ошибка для объекта 0x12ce8c3d8: некорректная контрольная сумма для освобожденного объекта - объект, вероятно, был изменен после освобождения. * установить точку останова в malloc_error_break для отладки

Хуже того, авария не повторяется. Иногда иногда случается сбой раньше. Так как в симуляторе он отлично работает, мы не можем использовать инструменты управления памятью, такие как «Guard Malloc». Мы безуспешно пытались использовать инструменты «Утечки» и «Зомби».

Мы знаем о том, что iPhone использует набор команд ARM_NEON, тогда как в книге Mac у нас есть SSE2. Может быть, это проблема? Кроме того, библиотека зависит от потоков Boost. Возможно, это проблема многопоточности? Что заставляет его сбой на устройстве, но не в симуляторе? Есть ли у нас потенциальный недостаток в очень простой точке?

Заранее благодарен! Жду ответы :)

+0

Я использую IOS 9.1 и Xcode 7.1 .. – jimichecktnix

ответ

0

Решение:

Вы должны компилировать подталкивание для прошивки со следующим флагом

-DBOOST_SP_USE_SPINLOCK

Вы можете мое подталкивание компилировать скрипт здесь с флагом уже установлен: https://github.com/danoli3/ofxiOSBoost/tree/master/scripts

Дополнительная информация об этом выпуске Boost Threads: https://stackoverflow.com/a/14738583/1676524

полный разрыв вниз проблемы на этом блоге: http://preshing.com/20121019/this-is-why-they-call-it-a-weakly-ordered-cpu/

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