如何配置gcc以便为android编译?

如何配置gcc以便为android编译?,android,gcc,android-ndk,Android,Gcc,Android Ndk,我在gcc文档中读到,它支持使用-mandroid和-mbionic开关构建android二进制文件。首先,我尝试使用从svn构建的本地gcc。结果: dancsi@dancsi-VirtualBox:~$ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/i686-pc-linux-gnu/4.7.0/lto-wrapper Target: i686-pc-linux-

我在gcc文档中读到,它支持使用-mandroid和-mbionic开关构建android二进制文件。首先,我尝试使用从svn构建的本地gcc。结果:

dancsi@dancsi-VirtualBox:~$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/i686-pc-linux-gnu/4.7.0/lto-wrapper
Target: i686-pc-linux-gnu
Configured with: ../source/configure --enable-threads --disable-nls
Thread model: posix
gcc version 4.7.0 20110611 (experimental) (GCC)
dancsi@dancsi-VirtualBox:~$ g++ test.cpp -mandroid -o test.out
dancsi@dancsi-VirtualBox:~$ file test.out
test.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
基本上,它失败了。接下来,我尝试使用target=arm linux androideabi编译相同的gcc源代码,但没有定义sysroot,…,它通过了配置,但构建失败,因为找不到pthread.h:

In file included from ../.././gcc/gthr-default.h:1:0,
                 from ../../../combined/libgcc/../gcc/gthr.h:160,
                 from ../../../combined/libgcc/../gcc/unwind-dw2.c:37:
../../../combined/libgcc/../gcc/gthr-posix.h:41:21: fatal error: pthread.h: No such file or directory
compilation terminated.
那么,有人知道如何使用gcc来构建android二进制文件吗?我不想使用codesource或androidndk

编辑: 我的配置选项

configure --target=arm-linux-android --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-libssp --disable-libgomp --disable-nls --enable-languages=c,c++,java
我得到了和你一样的错误,但我不是为Android编译的。我正在尝试构建w64-mingw32编译器

    AR=x86_64-w64-mingw32-ar RANLIB=x86_64-w64-mingw32-ranlib
../gcc-4.5.1/configure --prefix=/tools \
--with-local-prefix=/tools --enable-clocale=gnu \
--enable-shared --enable-threads=posix \
--enable-__cxa_atexit --enable-languages=c,c++ \
--disable-libstdcxx-pch --disable-multilib \
--disable-bootstrap --disable-libgomp \
--without-ppl --without-cloog --build=$MACHTYPE --host=$MACHTYPE --target=x86_64-w64-mingw32
我的回答是,你知道这不仅仅是安卓系统,问题更普遍,而不仅仅是为ARM架构构建。
我认为这是一个C++问题,因为我自己也没有问题,只需要构建一个C编译器。

< P>我在编译我自己的Android的交叉编译工具链时,和DANSI有完全相同的问题,我想建立一个32位的变型,所以我不需要在VM上购买64位PC或者做我的Android。 我使用的工具链来源于官方AOSP工具链回购:

repo init -u https://android.googlesource.com/toolchain/manifest
解决方案是使用以下两个额外的配置选项:-带标头和-带LIB。我通过阅读以下文件获得了此解决方案:[android工具链repo]/build/README:

另一种方法是使用-with headers和-with指定头和库 -单独使用LIB。如果使用前缀配置树。标题 和库将复制到前缀指定的安装目录

对于这两个额外参数的值,我使用了[android src repo]/prebuilts/ndk/8/platforms/android-14/arch-arm/usr/lib和[android src repo]/prebuilts/ndk/8/platforms/android-14/arch-arm/usr/include。[android src repo]指的是我对基本AOSP源的回购结帐,我在android-4.2.2_r1分支上

我需要的两个configure语句的最终结果如下:

./configure --target=arm-eabi --host=i686-linux-gnu --build=i686-linux-gnu --disable-gold \
    --with-gcc-version=4.6 --with-binutils-version=2.21 --with-gmp-version=4.2.4 --with-mpfr-version=2.4.1 \
    --with-gdb-version=7.3.x --with-gold-version=2.21 --prefix=/tmp/toolchain --disable-multilib \
    --with-libs=/home/boeboe/android-src/prebuilts/ndk/8/platforms/android-14/arch-arm/usr/lib \
    --with-headers=/home/boeboe/android-src/prebuilts/ndk/8/platforms/android-14/arch-arm/usr/include \
    --program-transform-name='s&^&arm-eabi-&' --with-arch=armv5te --disable-option-checking  

./configure --target=arm-linux-androideabi --host=i686-linux-gnu --build=i686-linux-gnu --enable-gold \
    --with-gcc-version=4.6 --with-binutils-version=2.21 --with-gmp-version=4.2.4 --with-mpfr-version=2.4.1 \
    --with-gdb-version=7.3.x --with-gold-version=2.21 --prefix=/tmp/toolchain \
    --with-libs=/home/boeboe/android-src/prebuilts/ndk/8/platforms/android-14/arch-arm/usr/lib \
    --with-headers=/home/boeboe/android-src/prebuilts/ndk/8/platforms/android-14/arch-arm/usr/include \
    --program-transform-name='s&^&arm-linux-androideabi-&' --disable-option-checking
注意额外的-disable选项检查参数,这是configure接受所有参数所必需的

这个长长的参数列表是通过检查为默认64位版本的4.6 gcc工具链传递的原始配置参数构建的。这可以在[android src repo]/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6和[android src repo]/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6中的源文件中进行检查

在相同的文件中,可以找到git标记,因此我也在我的[android toolchain repo]中签出这些特定版本。对于gcc需要的额外模块,如gmp/mpfr/gdb…,我提取了[android工具链repo]/gmp | mpfr | gdb中可用的tar ball的正确版本。这是我能找到的最简单的方法,因为我最初的configure语句能够获取这些模块


如上所述的相同技术还允许我编译当前在AOSP主分支上使用的最新GCC4.7工具链的32位变体。在这种情况下,配置选项当然不同。

我可能发现了一些可以帮助您的东西。现在知道这一点很好:我将尝试将linux x64构建到windows x86_64-w64-mingw32,并将报告返回=。。。
./configure --target=arm-eabi --host=i686-linux-gnu --build=i686-linux-gnu --disable-gold \
    --with-gcc-version=4.6 --with-binutils-version=2.21 --with-gmp-version=4.2.4 --with-mpfr-version=2.4.1 \
    --with-gdb-version=7.3.x --with-gold-version=2.21 --prefix=/tmp/toolchain --disable-multilib \
    --with-libs=/home/boeboe/android-src/prebuilts/ndk/8/platforms/android-14/arch-arm/usr/lib \
    --with-headers=/home/boeboe/android-src/prebuilts/ndk/8/platforms/android-14/arch-arm/usr/include \
    --program-transform-name='s&^&arm-eabi-&' --with-arch=armv5te --disable-option-checking  

./configure --target=arm-linux-androideabi --host=i686-linux-gnu --build=i686-linux-gnu --enable-gold \
    --with-gcc-version=4.6 --with-binutils-version=2.21 --with-gmp-version=4.2.4 --with-mpfr-version=2.4.1 \
    --with-gdb-version=7.3.x --with-gold-version=2.21 --prefix=/tmp/toolchain \
    --with-libs=/home/boeboe/android-src/prebuilts/ndk/8/platforms/android-14/arch-arm/usr/lib \
    --with-headers=/home/boeboe/android-src/prebuilts/ndk/8/platforms/android-14/arch-arm/usr/include \
    --program-transform-name='s&^&arm-linux-androideabi-&' --disable-option-checking