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 ヘッダーの場所を指していることをどのように保証するかです。