2

MFMessageComposeViewControllerViewControllerでメッセージを送信するために使用しています。Google Protobuf Libをインポートする前に、すべてが機能します。しかし、libをインポートした後、次の行で常にEXC_BAD_ACCESSエラーが発生します。

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

しかし、Debug Navigatorでは、常に次のスタックを取得します。これにより、bool SimpleDescriptorDatabase::DescriptorIndex<Value>::AddFileメソッドinに移動しdescriptor_database.cpp、次にbool InsertIfNotPresentメソッドinに移動しmap-util.hます。descriptor_database.cppとは両方map-util.hからGoogle Protobuf Libです。

スタック

の初期化が。と関係がある理由がわかりMFMessageComposeViewControllerませんGoogle Protobuf Lib

libを削除することで問題を解決できますが、私の通信エンジンでは必要です。

私はグーグルで検索しましたが、答えは見つかりませんでした。誰かが私を正しい方向に導くことができればありがとう。

これらの2つのスクリーンショットが役立つかどうかはわかりません。

スクリーンショット1 スクリーンショット2

4

3 に答える 3

4

protobufライブラリコンパイラオプション「AppleLLVMコンパイラ4.2-デフォルトで非表示のコード生成\シンボル」をYESに変更すると、この問題が解決します。

于 2013-02-18T07:04:12.093 に答える
2

フラグ-fvisibility=hidden(シンボルなし)を使用してgccでprotobufをコンパイルすると、うまくいきました(arm7用にコンパイルされました)

于 2013-04-29T13:37:43.240 に答える
0

これは私にも起こりました。私のスタックトレースは完全に同じではありませんでしたが、似ていました。

トレースから、呼び出し[MFMessageComposeViewController init]によってlibprotobuf.dylibがロードされていることがわかります。

これはAppleのdylibであるためMFMessageComposeViewController、直接的または間接的にlibprotobufに内部的に依存しています。それをロードすると、おそらく静的バージョンのprotobufと衝突します。

私はこれがどのように/なぜ起こるのか理解していません。

この問題を回避するには、C++標準ライブラリをlibc++に設定しました。注:libc++でリンクするすべてのC++ライブラリもビルドする必要があります。それらを構築するときは、必ず'を設定してCXX=clang++くださいCXXFLAGS='-stdlib=libc++

注:libc ++は以前のバージョンのiOSでは使用できないため、これによりiOS5.0以降をターゲットにする必要があります。

于 2013-01-16T11:28:45.173 に答える