2013-10-03 51 views
0

我在这一个绳索的尽头。为ARM Android交叉编译GCC。在GMP建设失败

我是Android开发新手。我已阅读GCC安装文档和嵌入式Android的部分内容。我正在尝试使用使用make-standalone-toolchain.sh脚本构建的Android NDK工具链来交叉编译gcc 4.7。我使用来自NDK工具链源的gcc和binutils源文件。

我复制了GCC-4.7和Binutils 2.23到一个目录中的gcc-src和创建旁边既是 '构建' 目录,如下所示:

gcc-src/gcc-4.7 
    gcc-src/binutils-2.23 
    gcc-src/build 

我的符号链接来源 BFD , 气体, gprof的, LD, gprof的 操作码 从的binutils到GCC-4.7源目录。我也跑在了contrib /的脚本下载用于 GMP相关人士透露, MPFR MPC 并创建相应的符号链接

我受够了(最新)运行配置以下选项:

sh ../gcc-4.7/configure --prefix=/usr/arm --disable-option-checking --host=arm-linux-eabi 
    --target=arm-linux-eabi --with-sysroot=/usr/sysroot --with-build-sysroot=/usr/sysroot --with-build-time-tools=/usr/bin --program-prefix=arm- 
    --disable-multilib --with-cpu=arm7 --enable-languages=c,c++,lto --disable-werror --disable-nls CC=arm-linux-androideabi-gcc GCC=arm-linux-androideabi-gcc 
    CFLAGS='-Wall -g -mfloat-abi=softfp -mbionic -mandroid -Wl,-lsupc++ -Wl,-lgnustl_shared' 
    CPPFLAGS='-Wall -g -mbionic -mandroid' LDFLAGS='-Wl,-lsupc++ -Wl,-lgnustl_shared' CXX=arm-linux-androideabi-g++ 
    LD=arm-linux-androideabi-ld STRIP=arm-linux-androideabi-strip OBJDUMP=arm-linux-androideabi-objdump READELF=arm-linux-androideabi-readelf 
    AS=arm-linux-androideabi-as NM=arm-linux-androideabi-nm 
    LIBS='-lc -ldl -lm' CC_FOR_TARGET=arm-linux-androideabi-gcc CPP_FOR_TARGET=arm-linux-androideabi-gcc CXX_FOR_TARGET=arm-linux-androideabi-g++ 
    GCC_FOR_TARGET=arm-linux-androideabi-gcc RANLIB_FOR_TARGET=arm-linux-androideabi-gcc-ranlib LD_FOR_TARGET=arm-linux-androideabi-ld 
    AS_FOR_TARGET=arm-linux-androideabi-as NM_FOR_TARGET=arm-linux-androideabi-gcc-nm AR_FOR_TARGET=arm-linux-androideabi-gcc-ar 
    READELF_FOR_TARGET=arm-linux-androideabi-readelf 
    OBJDUMP_FOR_TARGET=arm-linux-androideabi-objdump STRIP_FOR_TARGET=arm-linux-androideabi-strip 
    host_configargs=--with-headers=/usr/sysroot/usr/include target_configargs=/usr/sysroot/usr/include 

当我运行make -d ...或make -d all-host ...它在尝试编译gen-fac_ui.c时经常失败,因为它无法找到包含stdio.h,stdint.h或string.h。

我将在明天重新设置我的编译目录并重新开始后添加确切的错误,但我希望在我传递之前发布详细信息和问题。

任何帮助...非常感谢。我在这一个上亏本。

快速注:我注意到,binutils的src目录包含一个包括/文件夹...我会尽力符号链接是到GCC src目录并运行“make distclean命令”然后” ../gcc-4.7/再配置& &。

更新:符号链接包括/没有解决问题。下面是我不断收到

make[2]: Entering directory `/project/android/tc-src/gcc/gcc-src/build/gmp' 
    gcc `test -f 'gen-fac_ui.c' || echo '../../gcc-4.7/gmp/'`gen-fac_ui.c -o gen-fac_ui 
    Putting child 0x007ddd30 (gen-fac_ui) PID 25531 on the chain. 
    Live child 0x007ddd30 (gen-fac_ui) PID 25531 
    ../../gcc-4.7/gmp/gen-fac_ui.c:20:19: error: stdio.h: No such file or directory 
    ../../gcc-4.7/gmp/gen-fac_ui.c:21:20: error: stdlib.h: No such file or directory 
    In file included from ../../gcc-4.7/gmp/gen-fac_ui.c:23: 
    ../../gcc-4.7/gmp/dumbmp.c:42:20: error: string.h: No such file or directory 
    In file included from ../../gcc-4.7/gmp/gen-fac_ui.c:23: 
+0

您是否正在交叉编译gcc或跨本地gcc for arm?要交叉编译gcc,您还需要3个依赖关系,即GMP MPFR和MPC –

+0

不完全确定这意味着什么......我正在使用--build = build --host = arm-linux-eabi和--target = arm-linuxeabi。我将GMP MPFR和MPC的源代码下载到gcc-4.7源代码目录中,这样它们将被编译为gcc版本 – MonaLisaOverdrive

+0

'--host = arm-linux-eabi和--target = arm-linuxeabi'这意味着您试图跨越本地,由此产生的二进制文件将在手臂板上执行。你能分享你的配置细节吗? –

回答

0

错误我通过执行以下操作成功编译GEN-fac_ui:因为我使用的是需要

  1. 卸载构建GCC这是不是(我认为)由Android NDK的make-standalone-toolchain.sh脚本生成的交叉编译器工具链
  2. 配置适当的变量以将交叉编译器工具设置为BUILD工具。

我现在有一个不同的问题,我将发布在不同的问题。基本上,gen-fac_ui编译时,它当然不会运行。