交叉编译器

什么是交叉编译器

交叉编译器可以使我们在主机上编译出可以在嵌入式设备上运行的程序

下载地址

  • arm官方提供的下载地址在这:链接 link

在这里插入图片描述

  • ubuntu直接apt-get下载

    sudo apt-get install gcc-aarch64-linux-gnu#安装64位用于操作系统的交叉编译器,gcc版本是5.4,安装位置在/usr/bin  
    sudo apt-get install gcc-arm-linux-gnueabihf#安装32位用于操作系统的交叉编译器,gcc版本是5.4,安装位置在/usr/bin
    
         
         
    • 1
    • 2

名字解释

有好多可选,接下来一一解释这么些都是些啥,这么长的名字都分别代表了什么含义。我们只对x86_64 linux系统主机中的几个交叉编译器进行名字分析,windows的不管

  • [gcc]-[arm]-[8.3]-[2019.03]-[x86_64]-[arm]-[eabi].tar.xz
    gcc就是我们用的gcc,arm代表嵌入式平台是arm,8.3代表gcc的版本,2019.03代表该交叉编译器的发布时间,x86_64代表主机的平台可以是32位系统也可以是64位系统,arm代表的是32位架构同时这个位置不带linux也代表了这个编译器是编译不带操作系统的裸机程序,eabi代表嵌入式应用程序二进制接口

  • [gcc]-[arm]-[8.3]-[2019.03]-[x86_64]-[arm-linux]-[gnueabihf].tar.xz
    与上面最大的不同是arm变成了arm-linux,代表该编译器是编译跟linux系统相关的,eabi变成了gnueabihf,其中gnueabi代表使用了GNU针对PC的Glibc库(因为这里是编译d操作系统的),其中hf代表浮点计算使用hard float方法
    armel、armhf和arm64的关系与区别

  • [gcc]-[arm]-[8.3]-[2019.03]-[x86_64]-[aarch64]-[elf].tar.xz
    aarch64代表目标板是armv8 64位架构不带操作系统,elf代表用嵌入式库uclib或newlib,同时64位的arm默认就是hf的,因此不需要hf的后缀
    elf和eabi区别
    elf和eabi区别

  • [gcc]-[arm]-[8.3]-[2019.03]-[x86_64]-[aarch64-linux]-[gnu].tar.xz
    aarch64-linux代表armv8 64位架构的带linux操作系统的,gnu代表使用了GNU针对PC的Glibc库

  • [gcc]-[arm]-[8.3]-[2019.03]-[x86_64]-[aarch64_be-linux]-[gnu].tar.xz
    be代表大端,一般别的默认用小端

命名总结

代表gcc编译器代表目标芯片为armgcc的版本该交叉编译工具发布时间主机的平台可以是32位系统也可以是64位系统目标芯片运行的架构和是否带操作系统用什么库相关
32位裸机gccarm8.32019.03x86_64arm
(32位无操作系统的裸机)
eabi
32位带操作系统arm-linux
(32位linux系统)
gnueabihf
(针对使用GNU针对PC的Glibc库,且是硬浮点)
64位裸机aarch64
(64位无操作系统的裸机)
elf
(用嵌入式库uclib或newlib)
64位带操作系统aarch64-linux
(64位linux系统)
-gnu
(用GNU针对PC的Glibc库,64位默认是硬浮点)

使用方法

  1. 下载解压到目录下,然后在~/.bashrc里将目录加入环境
    export PATH=/home/hsq/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin:$PATH#该目录下的aarch64-linux-gnu-gcc才是真正代替gcc进行编译的本体  
    export CROSS_COMPILE=aarch64-linux-gnu-#用于指定交叉编译,在大部分项目的makefile文件中该参数会加在gcc前面
    export ARCH=arm64#用于大部分项目指定目标架构,包括后续涉及的uboot、linux原码等项目
    
         
         
    • 1
    • 2
    • 3
  2. 查看
    aarch64-linux-gnu-gcc --version#打印出版本信息
    
         
         
    • 1
  3. 然后编译的时候就直接使用
    aarch64-linux-gnu-gcc main.c -o main.out#跟gcc一样用
    make -j4#完成第一步的添加环境变量后就可用于大部分项目的makefile
    
         
         
    • 1
    • 2
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值