Странный EXC_BAD_ACCESS в приложении для iOS

Я использую MFMessageComposeViewController отправить сообщение в моем представлении контроллера. Перед импортом Google Protobuf Lib все работает. Но после импорта библиотеки я всегда получаю ошибку EXC_BAD_ACCESS в строке:

MFMessageComposeViewController *messager = [[MFMessageComposeViewController alloc] init];

Но в Навигаторе отладки я всегда получаю следующий стек, который приводит меня к bool SimpleDescriptorDatabase::DescriptorIndex<Value>::AddFile метод в descriptor_database.cpp а затем bool InsertIfNotPresent метод в map-util.h, И то и другое descriptor_database.cpp а также map-util.h из Google Protobuf Lib,

стек

Я запутался, почему инициализация MFMessageComposeViewController имеет какое-либо отношение к Google Protobuf Lib,

Удаление библиотеки может решить проблему, но это необходимо в моем механизме связи.

Я погуглил без ответа. Спасибо, если кто-нибудь может привести меня в правильном направлении.

Я не уверен, помогают ли эти два скриншота:

Снимок экрана 1Снимок экрана 2

3 ответа

Решение

Измените параметр компилятора библиотеки protobuf "Apple LLVM 4.2 - Генерация кода \ Скрытые по умолчанию символы" на YES, чтобы решить эту проблему.

Компиляция protobuf с помощью gcc с флагом -fvisibility=hidden (без символов) сработала для меня (скомпилировала его для arm7)

Это случилось со мной тоже. Мой след стека был не совсем таким же, но похожим.

Из следа видно, что зовет [MFMessageComposeViewController init] вызывает загрузку libprotobuf.dylib.

Это дилиб от Apple, так MFMessageComposeViewController либо прямо, либо косвенно зависит от libprotobuf внутри. Его загрузка предположительно конфликтует с вашей статической версией protobuf.

Я не понял, как / почему это происходит.

Я обошел эту проблему, установив стандартную библиотеку C++ на libC++. ПРИМЕЧАНИЕ. Вам также потребуется собрать все библиотеки C++, на которые вы ссылаетесь с помощью libC++. Когда вы строите их, убедитесь, что вы установили CXX=clang++ а также CXXFLAGS='-stdlib=libc++".

ПРИМЕЧАНИЕ. Это заставит вас ориентироваться на iOS 5.0+, поскольку libC++ недоступна в более ранних версиях iOS.

Другие вопросы по тегам