Странный 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
,
Удаление библиотеки может решить проблему, но это необходимо в моем механизме связи.
Я погуглил без ответа. Спасибо, если кто-нибудь может привести меня в правильном направлении.
Я не уверен, помогают ли эти два скриншота:
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.