0

Android NDK ツールチェーンを手動でビルドしました。コンパイラを使用する場合を除いて、すべてが機能します。そのため、デフォルトではヘッダーを探す場所がわからないため、STL を含むコードをコンパイルできません。カスタムまたはビルド済みのツールチェーンを使用する前に、この問題が発生したことはありません。ただし、次のようなインクルードディレクトリを手動で追加すると

 -I$(NDK_TOOLCHAIN)/arm-linux-androideabi/include/c++/4.6/

その後、問題なく動作します。すべての重要なディレクトリを手動で追加するのは面倒です (これ以外にもあります)。確かに途中で何かが壊れた。

ビルドするために私が従った手順は次のとおりです。

 sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl

 Download NDK

 Untar NDK to [SOME_LOCATION], using /opt/ndk/

 Set NDK_ROOT=/opt/ndk/

  ./build/tools/download-toolchain-sources.sh src/

 Download MPC 0.9

 Move mpc tar to ./src/mpc/

 ./build/tools/build-gcc.sh --gmp-version=4.3.2 --mpc-version=0.9 --mpfr-version=2.4.2 --binutils-version=2.21 $(pwd)/src $(pwd) arm-linux-androideabi-4.6

 ./build/tools/build-gcc.sh --gmp-version=4.3.2 --mpc-version=0.9 --mpfr-version=2.4.2 --binutils-version=2.21 $(pwd)/src $(pwd) x86-4.6

 ./build/tools/build-gcc.sh --gmp-version=4.3.2 --mpc-version=0.9 --mpfr-version=2.4.2 --binutils-version=2.21 $(pwd)/src $(pwd) mipsel-linux-android-4.6

すべての STL ファイルが適切な場所に存在します。これらのカスタム ビルド ツールチェーンを参照として使用した後に STANDALONE ツールチェーンをビルドする場合、各バージョンのすべてのヘッダーとコンパイル済みライブラリ。

==更新

gcc にインクルード検索パスを強制的に吐き出させる:

  echo "#include <bogus.h> int main(){}" > t.c; /opt/android-9_arm/bin/arm-linux-androideabi-gcc -v t.c; rm t.c

これには、includes の下に検索パスが含まれています。

 /opt/android-9_arm/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/include

その場所には実際に次の ./cxx/4.6/STL_HEADERS があります

出力を Google の NDK ビルドと比較すると、深刻な点で実際に違いがあります。本当の問題は、GCC のカスタム ビルドが適切な G++ STL ヘッダーの場所を指していることをどのように保証するかです。

4

1 に答える 1

0

これは make-standalone-toolchain.sh のバグであることが判明しました。修正は次のとおりです。

mv $NDK_TOOLCHAIN/arm-linux-androideabi/include/c++/4.6 $NDK_TOOLCHAIN/arm-linux-androideabi/include/c++/4.6.x-google

それはほとんどの場合それを修正しました。しかし、ndkr8b が正式な GCC 4.6 サポートと共にリリースされた現在、このバグはまだ存在しています (2012 年 7 月 25 日現在)。スタンドアロン ツールチェーンに関連するいくつかのバグの詳細 (http://code.google.com/p/android/issues/detail?id=35279)。

于 2012-08-03T18:54:38.543 に答える