我正在尝试交叉编译简单的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 | --------------------------------------------------------------------