2012-12-28 41 views
2

我使用MFMessageComposeViewController在我的視圖控制器中發送消息。在導入Google Protobuf Lib之前,所有的東西都有效。但在導入的lib後,我總是在的線得到一個EXC_BAD_ACCESS錯誤:在iOS應用程序中奇怪的EXC_BAD_ACCESS

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

但在調試導航,我總是得到下面的堆棧,這使我bool SimpleDescriptorDatabase::DescriptorIndex<Value>::AddFile方法descriptor_database.cpp再到bool InsertIfNotPresent方法在map-util.hdescriptor_database.cppmap-util.h均來自Google Protobuf Lib

Stack

我很困惑爲什麼MFMessageComposeViewController初始化有什麼關係Google Protobuf Lib

刪除lib可以解決問題,但它是我的通信引擎中需要的。

我搜索了一下,沒有找到答案。謝謝如果有人能帶領我走向正確的方向。

我不知道,如果這兩個截圖幫助:

Screenshot 1 Screenshot 2

回答

4

更改protobuf庫編譯器選項「Apple LLVM編譯器4.2 - 代碼生成\符號默認隱藏」爲YES將解決此問題。

+0

這似乎是一個很好的和簡單的解決方案。雖然我們當前將lib稱爲編譯靜態庫,但我會試一試。 –

+0

也在Xcode 5.0.2和LLVM 5.0中工作。 – Reconquistador

+0

我不是故意復活這個問題,但是這個答案幫助我克服了同樣的問題,但是我想知道這個更改究竟修復了什麼? –

0

這發生在我身上了。我的堆棧跟蹤不完全相同,但類似。

從跟蹤很明顯,調用[MFMessageComposeViewController init]導致libprotobuf.dylib被加載。

這是蘋果的dylib,所以MFMessageComposeViewController直接或間接地依賴於libprotobuf內部。加載它可能與您的靜態版本的protobuf相沖突。

我還沒有想出如何/爲什麼會發生這種情況。

我通過將C++標準庫設置爲libC++來解決此問題。注意:您還需要構建與libC++鏈接的所有C++庫。當你建立它們時,確保你設置了CXX=clang++CXXFLAGS='-stdlib=libc++'。

注意:這將迫使您針對iOS 5.0+,因爲libC++在早期版本的iOS上不可用。

2

編譯與標誌-fvisibility =隱藏(無符號)GCC protobuf的工作對我來說 (編譯它ARM7)

相關問題