2012-07-12 49 views
0

我已经手动构建Android NDK工具链。除了当我使用编译器时,一切都可以正常工作,但它不能找到基本的STL东西。所以它不能编译包含STL的代码,因为它默认不知道在哪里寻找标题。在使用自定义或预编译工具链之前,我从来没有遇到过这个问题。但是,如果我手动添加包括目录像Android建筑工具链无法找到/缺少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工具链后用作参考这些定制的工具链。

== UPDATE

强制GCC吐出它包含搜索路径:

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

这包含一个搜索路径下包括:

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

在该位置确实是以下./cxx/4.6/STL_HEADERS

将输出与谷歌的NDK版本进行比较确实在不同的地方有所不同。现在真正的问题是如何保证我的GCC自定义编译指向适当的G ++ STL标头位置。

+0

[Halsafar的博客文章](http://sandstormgames.ca/blog/2012/07/11/android-ndk-standalone-gcc-4-6/)FWIW你最好给任何人回答你的问题的归属和信用在你的博客上张贴外部! – t0mm13b 2012-07-12 00:50:56

+0

当然。我甚至会把它链接到这里。无论如何,我仍然可能会回答这个问题,因为我仍在挖掘。 – Halsafar 2012-07-12 02:19:08

回答

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支持,这个bug仍然存在(截至2012年7月25日)。有关独立工具链(http://code.google.com/p/android/issues/detail?id=35279)的一些错误的更多详细信息。