Ubuntu 8.10 编译 Android2.3.4
编译时遇到些问题,这里记录下来,方便回顾:
1、arm-eabi-4.4.3
prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc -mthumb-interwork -Ibionic/libc/private -o out/target/product/generic/obj/lib/crtbegin_dynamic.o -c bionic/libc/arch-arm/bionic/crtbegin_dynamic.S prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc: /lib/tls/i686/cmov/libc.so.6: version `GLIBC_2.11′ not found (required by prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc) make: *** [out/target/product/generic/obj/lib/crtbegin_dynamic.o] 错误 1
这个编译错误是因为在32位Ubuntu上编译引起的交叉编译器问题,需要降低使用的版本,使用4.4.0来进行编译;
解决方法:
进入android源码目录中 /prebuild/linux-x86/toolchain/,里面包含了几个版本的交叉编译器arm-eabi-4.x.x,这里直接正在使用的arm-eabi-4.4.3备份,比如重命名成arm-eabi-4.4.3-old,然后新建一个arm-eabi-4.4.3文件夹,并将arm-eabi-4.4.0里的内容copy一份到新建的arm-eabi-4.4.3中,这样就起到了欺骗的效果,实际使用的就是4.4.0;
2、GCC
target thumb C: liba2dp <= external/bluetooth/bluez/audio/../sbc/sbc_primitives_neon.c external/bluetooth/bluez/audio/../sbc/sbc_primitives_neon.c: In function 'sbc_calc_scalefactors_j_neon': external/bluetooth/bluez/audio/../sbc/sbc_primitives_neon.c:309: error: can't find a register in class 'GENERAL_REGS' while reloading 'asm' external/bluetooth/bluez/audio/../sbc/sbc_primitives_neon.c:309: error: 'asm' operand has impossible constraints make: *** [out/target/product/galaxys/obj/SHARED_LIBRARIES/liba2dp_intermediates/../sbc/sbc_primitives_neon.o] Error 1
Ubuntu 8.10上自带的gcc版本是4.3.2,在编译2.3时会出现上面的'GENERAL_REGS’错误,这是由于这个版本的gcc存在一个bug,所以对gcc进行升级即可,
解决方法:
apt-get install gcc
如果这时候,你还是无法编译通过,那么建议你换高版本的系统试试,比如换到ubuntu 10.10上,
建议装个双系统,使用ubuntu提供的wubi工具,直接装十分的方便~
3、G++
换到10.10 编译时,居然又抽风出现,gcc: error trying to exec 'cc1plus': execvp: 没有那个文件或目录的错误
找不到cc1plus,说明G++与GCC之间存在问题,很有可能是正在使用的两者版本不一样导致
cd /usr/bin
ls -l gcc*
lrwxrwxrwx 1 root root 7 2011-10-20 16:38 gcc -> gcc-4.4
-rwxr-xr-x 2 root root 212168 2010-09-10 17:16 gcc-4.3
-rwxr-xr-x 1 root root 224488 2010-09-28 02:43 gcc-4.4
-rwxr-xr-x 1 root root 232912 2010-09-28 05:03 gcc-4.5
ls -l g++*
lrwxrwxrwx 1 root root 7 2011-10-20 16:36 g++ -> g++-4.3
-rwxr-xr-x 2 root root 212104 2010-09-10 17:15 g++-4.3
-rwxr-xr-x 1 root root 228520 2010-09-28 02:42 g++-4.4
果然版本不一,修改成一样的即可
rm g++
ln -s g++-4.4 g++ //将g++重定向到4.4的版本