编译内核的时候报错:
gcc: error: unrecognized argument in option ‘-mabi=aapcs-linux
上网大概搜了一下,是交叉编译链的问题;
查找相关解决方案:主要参考了ZLG的资料;
设置系统环境变量后,只需在 Linux 终端输入 arm-linux-gnueabihf-gcc,就可以调用交叉编译器,简单方便
包的下载和解压
我找到一个编译器源文件 gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.bz2
在网上找一个相关的即可,如果找不到可去ZLG官网,或者私信给我留邮箱
然后进行解压
vmuser@Linux-host: ~$tar -jxvf gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.bz2
路径的设置
以 deb 或者 bin 方式发布的工具包,安装后通常会自动设置环境变量;而以.tar.*方式的
发布包,在完成解压后,如果不设置环境变量,或者不指定交叉编译器的完整路径,系统是
无法找到交叉编译器的。
假如交叉工具链安装在“ /home/xxx/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/ ”目录下,用 ls 命令可以查看到该目录下的各种文件:
arm-linux-gnueabihf-addr2line arm-linux-gnueabihf-elfedit arm-linux-gnueabihf-gcov arm-linux-gnueabihf-ld.gold arm-linux-gnueabihf-readelf
arm-linux-gnueabihf-ar arm-linux-gnueabihf-g++ arm-linux-gnueabihf-gdb arm-linux-gnueabihf-nm arm-linux-gnueabihf-size
arm-linux-gnueabihf-as arm-linux-gnueabihf-gcc arm-linux-gnueabihf-gfortran arm-linux-gnueabihf-objcopy arm-linux-gnueabihf-strings
arm-linux-gnueabihf-c++ arm-linux-gnueabihf-gcc-4.9.2 arm-linux-gnueabihf-gprof arm-linux-gnueabihf-objdump arm-linux-gnueabihf-strip
arm-linux-gnueabihf-c++filt arm-linux-gnueabihf-gcc-ar arm-linux-gnueabihf-ld arm-linux-gnueabihf-pkg-config
arm-linux-gnueabihf-cpp arm-linux-gnueabihf-gcc-nm arm-linux-gnueabihf-ld.bfd arm-linux-gnueabihf-pkg-config-real
arm-linux-gnueabihf-dwp arm-linux-gnueabihf-gcc-ranlib arm-linux-gnueabihf-ldd arm-linux-gnueabihf-ranlib
进入用户根目录,打开.bashrc文件
cd ~/
vim .bashrc
在该文件的最后添加 export PATH=/xxx:$PATH ,其中xxx为上面说的解压目录,如:
vmuser@Linux-host:~$ export PATH=/home/hann/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin:$PATH
然后执行(点 /空格/.bashrc)使之马上生效。
. .bashrc
测试是否安装好:按table,
arm-linux-gnueabihf-
注意,打开.bashrc 文件到时候 不要用sudo命令;
arm-linux-gnueabihf-addr2line arm-linux-gnueabihf-elfedit arm-linux-gnueabihf-gcov arm-linux-gnueabihf-ld.gold arm-linux-gnueabihf-readelf
arm-linux-gnueabihf-ar arm-linux-gnueabihf-g++ arm-linux-gnueabihf-gdb arm-linux-gnueabihf-nm arm-linux-gnueabihf-size
arm-linux-gnueabihf-as arm-linux-gnueabihf-gcc arm-linux-gnueabihf-gfortran arm-linux-gnueabihf-objcopy arm-linux-gnueabihf-strings
arm-linux-gnueabihf-c++ arm-linux-gnueabihf-gcc-4.9.2 arm-linux-gnueabihf-gprof arm-linux-gnueabihf-objdump arm-linux-gnueabihf-strip
arm-linux-gnueabihf-c++filt arm-linux-gnueabihf-gcc-ar arm-linux-gnueabihf-ld arm-linux-gnueabihf-pkg-config
arm-linux-gnueabihf-cpp arm-linux-gnueabihf-gcc-nm arm-linux-gnueabihf-ld.bfd arm-linux-gnueabihf-pkg-config-real
arm-linux-gnueabihf-dwp arm-linux-gnueabihf-gcc-ranlib arm-linux-gnueabihf-ldd arm-linux-gnueabihf-ranlib
交叉编译器的介绍
交叉编译器是在宿主机上运行的编译器,但是编译后得到的二进制程序却不能在宿主机上运行,而只能在目标机上运行。交叉编译器命名方式一般遵循“处理器-系统-gcc”这样的规则,一般通过名称便可以知道交叉编译器的功能。例如下列交叉编译器:
arm-none-eabi-gcc,表示目标处理器是 ARM,不运行操作系统,仅运行前后台程序;
arm-uclinuxeabi-gcc,表示目标处理器是 ARM,运行 uClinux 操作系统;
arm-none-linux-gnueabi-gcc,表示目标处理器是 ARM,运行 Linux 操作系统;
mips-linux-gnu-gcc,表示目标处理器是 MIPS,运行 Linux 操作系统。
进行 ARM Linux 开发,通常选择 arm-linux-gcc 交叉编译器。ARM-Linux 交叉编译器可以自行从源代码编译,也可以从第三方获取。在能从第三方获取交叉编译器的情况下,请尽量采用第三方编译器而不要自行编译,一是编译过程繁琐,不能保证成功,二是就算编译成功,也不能保证交叉编译器的稳定性,编译器的不稳定性会对后续的开发带来无限隐患。而第三方提供的交叉编译器通常都经过比较完善的测试,确认是稳定可靠的。
后续
如果您出现如下 情况 代表路径设置有问题:请仔细 阅读本文 从新设置
Tell CMake where to find the compiler by setting either the environment
variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
the compiler, or to the compiler name if it is in the PATH.