2012-06-30 8 views
8

私はAndroid用のいくつかのネイティブライブラリを開発し、Boostライブラリを使用しています。私が直面している問題は、一部のシステムライブラリとネイティブライブラリの一部をリンクしようとすると、UnsatisfiedLinkErrorがスローされるということです。あなたが唯一のすべてのコードが が依存します、単一のC++ランタイムを選択することができますBoostライブラリで例外とRTTIを無効にすることはできますか?

:NDKのドキュメントに記載されているように異なるC++ランタイムによるものです。 異なるC++ランタイムに対してコンパイルされた共有ライブラリを混在させることはできません。

システムライブラリではRTTIと例外は使用されませんが、ライブラリでは暗黙的に使用されます。 BOOST_EXCEPTION_DISABLEBOOST_NO_RTTIというマクロがありますが、動作させることができません。私もコンパイラフラグとして及びconfig.hppの中でそれらを設定しようとしたが、運と - まだのような多くのエラーを取得して

cannot use typeid with -fno-rtti 
私はブーストでこれらの機能を無効にするにはどうすればよい

、それも可能ですか?

+2

Boostをコンパイルしようとしたときにエラーが発生しましたか?あるいは、あなた自身のコードをコンパイルしようとしていますか? –

+0

自分のコードをコンパイルしようとしているとき。 – vitakot

+0

ところで、質問は意味がありません。私はヘッダーのみを使用していました...(主にcircular_buffer.hpp、signal.hpp、shared_ptr.hpp) – vitakot

答えて

5

答えは「多分」です。 いくつかのブーストライブラリは、例外を無効にしても動作します。 RTTIと同じです。

私ははあなたが興味のある特定のブーストライブラリのドキュメントをチェックお勧めします。

例えば、Boost.Arrayが無効の例外を除いて動作しますが、Boost.Formatはしません。

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

+0

あなたの答えをありがとう!あなたはおそらく正しいでしょう。このメッセージは、ブースト信号ライブラリに関連しています。これは 'boost boost'を使用しています。これは' boost any'を使用していることを意味し、この機能はおそらくrttiを有効にしなければ不可能です...実際にはBoostはコンパイラの設定に従って設定する必要があります'BOOST_NO_RTTI'などを明示的に定義する必要はありません。 – vitakot

関連する問題