2012-01-16 14 views
1

とブーストをコンパイルするときのAndroid NDKを使用してC++ライブラリブーストを使用してプログラムをコンパイルしようとすると、私はエラーの次の型を取得:のAndroid NDK

In file included from /home/afeder/android/0ad/jni/lib/boost/boost/assert.hpp:50, 
       from /home/afeder/android/0ad/jni/lib/boost/boost/random/linear_congruential.hpp:21, 
       from /home/afeder/android/0ad/jni/src/source/scriptinterface/ScriptInterface.h:34, 
       from /home/afeder/android/0ad/jni/src/source/ps/World.h:28, 
       from /home/afeder/android/0ad/jni/src/source/main.cpp:58: 
/home/afeder/android/android-ndk-r7/platforms/android-5/arch-arm/usr/include/assert.h: At global scope: 
/home/afeder/android/android-ndk-r7/platforms/android-5/arch-arm/usr/include/assert.h:63: warning: redundant redeclaration of 'void __assert(const char*, int, const char*)' in same scope 
/home/afeder/android/android-ndk-r7/platforms/android-5/arch-arm/usr/include/assert.h:63: warning: previous declaration of 'void __assert(const char*, int, const char*)' 
/home/afeder/android/android-ndk-r7/platforms/android-5/arch-arm/usr/include/assert.h:64: warning: redundant redeclaration of 'void __assert2(const char*, int, const char*, const char*)' in same scope 
/home/afeder/android/android-ndk-r7/platforms/android-5/arch-arm/usr/include/assert.h:64: warning: previous declaration of 'void __assert2(const char*, int, const char*, const char*)' 

を明らかに、いくつかの種類がありますBoostによって提供される一連の "assert"関数とNDK自体によって提供される関数との間で競合が発生しますが、どうすれば解決できますか?

ありがとうございました。

答えて

1

ヘッダーファイルには、ヘッダーファイルの内容全体をカプセル化する#defineマクロがあります。あなたのソースでは、あなたが必要としないヘッダーを定義解除する方が好きかもしれません。

例:Boostヘッダーファイルに#define BOOST_ASSERT_HPPがあり、NDKにANDROID_ASSERT_Hがある場合は、ソースに#undef BOOST_ASSERT_HPPを使用してBoost関連のヘッダーを定義解除できます。

+1

「インクルードガード」または「ヘッダーガード」と呼ばれるこれらのマクロは、同じヘッダーが複数含まれるのを防ぐためのものです。ヘッダー自体の外部に参照されることはありません。いずれにせよ、 '#define BOOST_ASSERT_HPP'ではなく、' #undef BOOST_ASSERT_HPP'では、ヘッダーの内容を処理することができません。 –

+0

これは間違いないかもしれません。それでは、複数の包含物を避けるための解決策は何ですか? – Deepak

+1

私が知る限り、両方のヘッダーを含めないでください。おそらくBoostヘッダーは '__assert'のような予約された識別子を使用すべきではありません(Boostは実装の一部とみなされ、実装がバグかもしれません)。 –