交叉编译helloworld.c到ARM(Cortex-A5)

我正在尝试交叉编译简单的helloworld.c以在ARM(Cortex-A5)上运行

我得到以下错误

gcc: error trying to exec 'cc1' execvp: No such file or directory 

硬件/软件 :SAMA5D31处理器,Android Linux

主持人 :Ubuntu 12.04

Makefile文件

 CC=/home/userid/android4sam_v4.0/cross_compile_mentor/arm-2013.05/bin/arm-none-linux-gnueabi-gcc CFLAG=I. helloworld:helloworld.o $(CC)-o helloworld helloworld.o -I. 

我已经编译主机上的程序,工作正常。 然后我导出交叉编译器path,并试图编译

交叉编译器的path是

 /home/userid/android4sam_v4.0/cross_compiler_mentor/arm-2013.05/arm-none-linux-gnueabi/bin 

还读了一些指向GCC_EXEC_PREFIX(env)的文章。 当我回显$ GCC_EXEC_PREFIX时,我没有得到任何回报。 如果这是原因,有人可以build议如何解决这个问题。

我也读过关于定义-mcpu = cortex-A5。 这是必要的吗?

我也做了一个findcc1发现以下

 /usr/lib/gcc/arm-linux-gnueabi/4.4.7/cc1 /usr/lib/gcc/arm-linux-gnueabi/4.6/cc1 

我也看过影响GCC的环境variables

我也读了一些关于“xgcc -B”的内容,我不确定这是否与解决这个问题有关。

gcc -print-search-dirs的输出

 install: /usr/lib/gcc/x86_64-linux-gnu/4.6/ programs: =/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux- gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../x86_64-linux-gnu/bin/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../x86_64-linux-gnu/bin/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../x86_64-linux-gnu/bin/ libraries: =/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../x86_64-linux-gnu/lib/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../x86_64-linux-gnu/lib/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../x86_64-linux-gnu/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/:/lib/x86_64-linux-gnu/4.6/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/4.6/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../x86_64-linux-gnu/lib/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../:/lib/:/usr/lib/ 

另外下面的命令编译没有任何问题

 arm-linux-gnueabi-gcc -o serial -static serial.c 

更新2013年12月1日通过修改克里斯·斯特拉顿build议CCvariables解决以下问题

 gcc: error trying to exec 'cc1' execvp: No such file or directory 

由于您使用的是Android,因此您可以使用NDK中由AOSP提供的工具链。

使用Android NDK时,通常只需要引入架构/平台的最小API。 对于ARM,我相信这是android-3 。 您可以使用更高版本的API,如android-21

下面是从我的MacBook。 NDK是r10d,它安装在/opt/android-ndk-r10d/

 export PATH="/opt/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin:$PATH" export CPP="arm-linux-androideabi-cpp" export CC="arm-linux-androideabi-gcc" export LD="arm-linux-androideabi-ld" export AR="arm-linux-androideabi-ar" export RANLIB="arm-linux-androideabi-ranlib" export CFLAGS="-g3 -Os -mfloat-abi=softfp -mfpu=vfpv3-d16 --sysroot=/opt/android-ndk-r10d/platforms/android-21/arch-arm" 

你一定要使用--sysroot所以系统知道使用哪个头文件和库。 你的另一种选择是用-I-L-l拼凑起来。

然后:

 $(CC) $(CFLAGS) -I. helloworld.c -o helloworld.exe 

之后,您使用adb将其推送到设备并执行它。 就像是:

 $ adb push helloworld.exe /data/local/tmp $ adb shell $ shell@android:/ $ cd /data/local/tmp $ shell@android:/data/local/tmp $ ./helloworld.exe 

以下是您应该注意的一些额外的CFLAGS (从脚本中的个人笔记来设置环境):

 # armeabi-v7a must use: # CXXFLAGS += -march=armv7-a -mfloat-abi=softfp # armeabi-v7a with Neon must use: # CXXFLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=neon # ARMv7 needs nothing special. In fact, specifying # CXXFLAGS += -march=armv7 will result in a compile error. # Cortex A8 requires a bug fix: # LDFLAGS += --fix-cortex-a8 

相关的,这里是ARM公司推荐的Cortex-A处理器标志。不要担心这个multilibs,因为Android会为你处理这个问题。

 -------------------------------------------------------------------- | ARM Core | Command Line Options | multilib | |----------|--------------------------------------------|----------| |Cortex-A* | [-mthumb] -march=armv7-a | armv7-ar | |(No FP) | | /thumb | |----------|--------------------------------------------|----------| |Cortex-A* | [-mthumb] -march=armv7-a -mfloat-abi=softfp| armv7-ar | |(Soft FP) | -mfpu=vfpv3-d16 | /thumb | | | | /softfp | |----------|--------------------------------------------|----------| |Cortex-A* | [-mthumb] -march=armv7-a -mfloat-abi=hard | armv7-ar | |(Hard FP) | -mfpu=vfpv3-d16 | /thumb | | | | /fpu | --------------------------------------------------------------------