2012-12-28 2 views
2

MFMessageComposeViewController을 사용하여 내 View Controller에서 메시지를 보냅니다. Google Protobuf Lib을 가져 오기 전에 모든 작업이 수행됩니다. 그러나 LIB를 가져온 후, 난 항상 라인에 EXC_BAD_ACCESS 오류를 얻을 :iOS 앱의 이상한 EXC_BAD_ACCESS

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

그러나 디버그 네비게이터에, 난 항상 bool InsertIfNotPresent 방법 다음 descriptor_database.cppbool SimpleDescriptorDatabase::DescriptorIndex<Value>::AddFile 방법 날 리드 다음과 같은 스택을 얻을 map-util.h. descriptor_database.cppmap-util.h은 모두 Google Protobuf Lib입니다. MFMessageComposeViewController의 초기화가 Google Protobuf Lib와 아무 이유

Stack

나는 혼란 스러워요.

lib를 제거하면 문제를 해결할 수 있지만 통신 엔진에 필요합니다.

저는 인터넷 검색을 한 적이 없으며 답변을 찾을 수 없습니다. 누구든지 나를 올바른 방향으로 인도 할 수 있다면 고마워. 이 역시 나에게 무슨 일이 있었

Screenshot 1 Screenshot 2

답변

4

protobuf 라이브러리 컴파일러 옵션을 "Apple LLVM 컴파일러 4.2 - 코드 생성 \ 기호가 기본적으로 숨김"으로 변경하면이 문제가 해결됩니다. (문자 제외) 숨겨진 플래그 -fvisibility =와 GCC와 protobuf 컴파일

+0

좋은 쉬운 해결책이 될 것 같다 (ARM7을 위해 그것을 컴파일). 현재 lib를 컴파일 된 정적 라이브러리라고 말하고 있지만, 한 번 사용해 보도록하겠습니다. –

+0

Xcode 5.0.2 및 LLVM 5.0에서도 작업합니다. – Reconquistador

+0

나는이 질문을 부활시키려는 것이 아니지만이 대답은 내가 op와 같은 문제를 극복하는 데 도움이되었다. 그러나 나는이 변화가 정확히 무엇을 수정했는지 알고 싶다. –

0

:

나는 두 스크린 샷 도움이 있는지 확실하지 않습니다. 내 스택 추적은 정확히 동일하지는 않지만 비슷했습니다.

추적에서 [MFMessageComposeViewController init]을 호출하면 libprotobuf.dylib가로드되고 있음이 분명합니다.

이것은 Apple의 dylib이므로 MFMessageComposeViewController은 직접 또는 간접적으로 libprotobuf를 내부적으로 사용합니다. 그것을로드하는 것은 아마도 protobuf의 정적 버전과 충돌 할 것입니다.

나는 어떻게/왜 이런 일이 발생했는지 알지 못했습니다.

이 문제점을 해결하기 위해 C++ 표준 라이브러리를 libC++로 설정했습니다. 참고 : 또한 libC++로 링크하는 모든 C++ 라이브러리를 빌드해야합니다. 빌드 할 때 CXX=clang++CXXFLAGS='-stdlib=libc++ '을 설정해야합니다.

참고 : 이는 iOS 5.0 이상을 대상으로합니다. 이전 버전의 iOS에서는 libC++를 사용할 수 없기 때문입니다.