ubuntu交叉编译链的环境设置

编译内核的时候报错:

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 交叉编译器可以自行从源代码编译,也可以从第三方获取。在能从第三方获取交叉编译器的情况下,请尽量采用第三方编译器而不要自行编译,一是编译过程繁琐,不能保证成功,二是就算编译成功,也不能保证交叉编译器的稳定性,编译器的不稳定性会对后续的开发带来无限隐患。而第三方提供的交叉编译器通常都经过比较完善的测试,确认是稳定可靠的。

后续

如果您出现如下 情况 代表路径设置有问题:请仔细 阅读本文 从新设置

扫描二维码关注公众号,回复: 12453584 查看本文章
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.

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u013921164/article/details/109256692