8

私は Android 用のネイティブ ライブラリをいくつか開発し、Boost ライブラリ (ヘッダー ベースのライブラリのみ) を使用しています。私が直面している問題は、ネイティブ ライブラリの一部をシステム ライブラリにリンクしようとすると、UnsatisfiedLinkErrorスローされることです。これは、NDK のドキュメントに記載されているように、C++ ランタイムが異なるためです。

すべてのコードが依存する単一の C++ ランタイムのみを選択できます。異なる C++ ランタイムに対してコンパイルされた共有ライブラリを混在させることはできません。

システム ライブラリは RTTI と例外を使用しませんが、私のライブラリは暗黙的に使用します。BOOST_EXCEPTION_DISABLEマクロとがあることは知っていますがBOOST_NO_RTTI、それを機能させることができません。それらをコンパイラフラグとして、またconfig.hppでも設定しようとしましたが、うまくいきませんでした.

cannot use typeid with -fno-rtti

Boost でこれらの機能を無効にするにはどうすればよいですか?

4

1 に答える 1

5

答えは「たぶん」です。一部のブースト ライブラリは、例外を無効にして動作しますが、動作しないライブラリもあります。RTTIも同様。

関心のある特定のブースト ライブラリのドキュメントを確認することをお勧めします。

たとえば、Boost.Array は例外を無効にして動作しますが、Boost.Format は動作しません。

のようなメッセージが表示される場合はcannot use typeid with -fno-rtti、RTTI を必要とする Boost の一部をコンパイルしているときに発生する可能性があります。エラーが発生した場所から、どのライブラリかがわかります (通常)。

于 2012-07-01T03:46:05.013 に答える