1、EABIarm-2008q3-39-arm-none-eabi 
Sourcery G++ Lite 2008q3-39 All versions... 
Sourcery G++ for ARM EABI is for use in bare-metal and/or RTOS environments.(适用于编译裸机或RTOS环境上的应用,比如u-boot等);Run-Time Libraries:ARMv4 - Little-Endian, Soft-Float;ARMv4 Thumb -Little- Endian, Soft-Float;ARMv6-M Thumb - Little-Endian, Soft-Float;ARMv7 Thumb-2 - Little-Endian, Soft-Float。
2、uClinux arm-2008q3-42-arm-uclinuxeabi
Sourcery G++ Lite 2008q3-42 All versions... 
Sourcery G++ for ARM uClinux is for systems running the Linux kernel without using a memory-management unit (MMU). You can use Sourcery G++ to build both the uClinux kernel and uClinux applications. )适用于编译linux内核和应用程序,不带MMU的CPU);Run-Time Libraries:ARMv4T - Little-Endian, Soft-Float;ARMv6-M Thumb - Little-Endian, Soft-Float;ARMv7 Thumb-2 - Little-Endian, Soft-Float。
3、GNU/Linux arm-2008q3-41-arm-none-linux-gnueabi
Sourcery G++ Lite 2008q3-41 All versions... 
Sourcery G++ for ARM GNU/Linux is for use in developing for systems which run the Linux kernel. You can use Sourcery G++ to build both the Linux kernel and Linux applications.(适用于编译linux内核和应用程序,带MMU的CPU);Run-Time Libraries:ARMv4T - Little-Endian, Soft-Float, GLIBC;ARMv5T - Little-Endian, Soft-Float, GLIBC;ARMv7-A Thumb-2 - Little-Endian, Soft-Float, GLIBC。
4、SymbianOS arm-2008q3-40-arm-none-symbianelf
Sourcery G++ Lite 2008q3-40 All versions... 
适用于编译Symbian应用程序;Run-Time Libraries:ARMv5 - Little-Endian, Soft-Float;ARMv5 - Little-Endian, VFP。

如果用一句话讲清楚arm-linux-gcc和arm-elf-gcc的区别的话,如何来说呢?

  arm-linux-gcc是针对arm + Linux的开发环境的,kernel使用的是linux,不是uclinux,arm是有硬件MMU的。

  而arm-elf-gcc是针对no MMU arm + uclinux的开发环境,kernel使用的是uclinux,硬件是廉价的无MMU的arm芯片。

  arm-linux-gcc倒是有点类似X86 PC环境下的linux开发。

arm-linux-gcc arm-elf-gcc 区别 
ARM的嵌入式系统开发中,常常用到交叉编译的GCC工具链有两种: arm-linux-*和 arm-elf-*,两者区别主要在于使用不同的C库文件。arm-linux-*使用 
GNU的Glibc,而arm-elf-*一般使用 uClibc/uC-libc或者使用REDHAT专门为嵌入式系统 
的开发的C库newlib.Glibc。uClibc/uC-libc以及 newlib都是C语言库文件,只是所应 
用的领域不同而已,Glibc是针对PC开发的,uClibc/uC-libc是与Glibc API兼容的小型 
化C语言库,实现了Glibc部分功能。   关于uClibc/uC-libc的说明,详见如下: 

  There are two libc libraries commonly used with uClinux. uC-libc and 
uClibc. They are quite different despite their similar names. Here is a 
quick overview of how they are different. 
  uC-libc is the original library for uClinux. It was based on sources from the Linux-8086 C library which was part of the ELKs project with m68000 
support added by Jeff Dionne and Kenneth Albanowski. It is a fairly complete 
libc implementation, however, some of the API's are a little non-standard 
and quite a few common libc routines are not present. Currently it has stable support for m68000, ColdFire and ARM (Non-MMU) architectures. It was 
primary design goal is to be small and light weight. It does try to conform 
to any standards, although its API tries to be compatible with most libcs, 
it is not always exactly the same. 
  The uClinux distribution provides an environment that can compile using either uC-libc or uClibc depending on your needs. For m68000 and Coldfire platforms it is generally better to chose uC-libc as it supports shared libraries and is the most commonly used libc for these CPUs. uClibc also works quite well with almost all platforms supported by the distribution. 
Which libc you choose to use will be decided by your requirements uClinux有两个经常使用的libc库:uC-libc和uClibc。
虽然两者名字很相似,其实有差 
别,下面就简单的介绍一下二者的不同之处。uC -libc是最早为uClinux开发的库,是 
Jeff Dionne和Kenneth Albanowski为在EKLs项目中支持m68000在Linux-8086 C库源码 
上移植的。uC-libc是一个完全的libc实现,但其中有一些api是非标准的,有些libc的 
标准也没有实现。uC-libc稳定地支持 m68000,ColdFire和没有MMU的ARM。其主要设计 
目标是“小”、"轻",并尽量与标准一致,虽然它的API和很多libc兼容,但是似乎并 
不像它期望的那样和所有标准一致。 
uClibc就是为了解决这个问题从uC-libc中发展出来的。它的所有API都是标准的(正确 
的返回类型,参数等等),它弥补了uC-libc中没有实现的libc标准,现在已经被移植到 
多种架构中。一般来讲,它尽量兼容glibc以便使应用程序用uClibc改写变的容易。 
uClibc能够在标准的 VM linux和uClinux上面使用。为了应用程序的简洁,它甚至可以 
在许多支持MMU的平台上被编译成共享库。Erik Anderson在uClibc背后做了很多的工 作。uClibc支持许多系列的处理器:m68000,Coldfire,ARM,MIPS,v850, x86, i960,Sparc,SuperH,Alpha,PowerPC和Hitachi 8。不断增加的平台支持显示uClibc 
能够很容易的适应新的架构。uClinux发行版提供了环境能够让你选择使用uC-libc或是 
uClibc编译。对于m68000和Coldfire平台来说,选择uC-libc还是稍微好一点,因为它 支持共享库,而共享库是这些cpu经常使用的 libc.uClibc也几乎和所有的平台都能很 
好的工作。选择哪种libc取决于你的需求。 
newlib 是一个用于嵌入式系统的开放源代码的C语言程序库,由libc和libm两个库组 
成,特点是轻量级,速度快,可移植到很多CPU结构上。newlib实现了许多复杂的功 
能,包括字符串支持,浮点运算,内存分配(如malloc)和I/O流函数(printf,fprinf() 等等)。其中libc提供了c 语言库的实现,而libm提供了浮点运算支持。 在为ARM交叉编译gcc编译器时,对gcc指定不同的配置选项时,使用的C语言库就不同, 
gcc编译器默认使用Glibc,也可以使用 uClibc/uC-libc(基本兼容Glibc API),当使用 
--with-newlib时,gcc编译器不使用Glibc。当没有交叉编译Glibc时,可以使用 
--with-newlib禁止连接Glibc而编译bootstrap gcc编译器。从gcc源目录下的 
config/arm中的t-linux和t-arm-elf中可以看出,不同的--target也影响gcc连接C语言 
库,t-linux(--target=arm-linux)默认使用Glibc,-arm-elf(--target=arm-elf)使用 
- Dinhibit_libc禁止连接Glibc,这时我们就可以使用newlib等其他C语言库编译GCC工 具链。 
虽然GCC工具链配置了不同的的C语言库,但由于这些C语言库都可以用来支持GCC,它们 
对核心数据的处理上不存在较大出入。因而arm-linux-* 和 arm-elf-*区别主要表现在 
C语言库的实现上,例如不同系统调用,不同的函数集实现,不同的ABI\启动代码以及 
不同系统特性等微小的差别。 
arm-linux-*和 arm-elf-*的使用没有一个绝对的标准,排除不同库实现的差异,gcc可 
以编译任何系统。arm-linux-*和 arm-elf-*都可以用来编译裸机程序和操作系统,只 
是在遵循下面的描述时系统程序显得更加协调: 
arm-linux-*针对运行linux的ARM机器,其依赖于指定的C语言库Glibc,因为同样使用 
Glibc的linux而使得arm-linux-*在运行linux的ARM机器上编译显得更加和谐。 
arm-elf-*则是一个独立的编译体系,不依赖于指定的C语言库Glibc,可以使用newlib 
等其他C语言库,不要求操作系统支持,当其使用为嵌入式系统而设计的一些轻巧的C语 
言库时编译裸机程序(没有linux等大型操作系统的程序),如监控程序,bootloader等 
能使得系统程序更加小巧快捷。

arm-linux-eabi 和arm-none-eabi

arm-linux-eabi 用于编译 armlinux 代码

arm-none-eabi 不指名操作系统,可以是linux, 也可以是vxworks等,arm-none-eabi 不包含 __linux__ 等特定宏,所以往往编译linux 内核的时候通不过。

linux下不同arm 编译器的异同相关推荐

  1. jlink怎么调试linux程序_纯Linux下的 ARM裸机调试环境搭建(GDB + JLink)

    一直想摆脱windows环境,在纯linux下进行arm裸机开发,但是由于一直不知道JLink如何在linux下运行和配置,一直无法进行下去. 以前都是windows+AXD调试.包括本人用的FL24 ...

  2. 在linux下安装fortran编译器详细教程

    在linux下安装fortran编译器 本教程安装的编译器是Intel® Parallel Studio XE 2013 for Linux*,建议使用相同的版本(也可自行去下载Linux版的压缩包) ...

  3. 关于EeePc的Linux下安装GCC编译器

    最近由于需要,把几年前(有点夸张)的EeePc 1000拿出来,想在它自带的Linux系统下进行编程.谁知道居然没有GCC编译器,所以源码安装肯定是不行的啦. 后来在终端(ctrl+alt+t)里输入 ...

  4. 在Linux下掌握arm和操作系统(0)--开篇闲聊

    很明显我是标题党,真正的标题是<在Linux下学习stm32和NUTTX RTOS>. 由于stm32也是ARM的,NUTTX也是操作系统,stm32和NUTTX有着arm的基本特征,NU ...

  5. Linux下gcc/g++编译器gdb调试器和makefile的使用

    文章目录 一.gcc的使用 gcc选项 二.gdb的使用 三.Linux项目自动化构建工具-make/Makefile 3.1 概念 3.2 使用 3.3 原理 一.gcc的使用 首先我们知道一个C/ ...

  6. linux下的ARM看门狗程序

    由于LINUX下应用层不能直接访问寄存器,只要通过驱动程序作为桥梁 //  驱动程序: #ifndef __KERNEL__  #define __KERNEL__ #endif #ifdef MOD ...

  7. linux下的arm仿真,使用QEMU仿真ARM Linux系统

    使用QEMU仿真ARM  Linux系统 使用方法,网上有很多文章可以参考: http://www.aurel32.net/info/debian_arm_qemu.php http://qemu-f ...

  8. linux下安装java编译器,编译器构造工具:安装 JFlex 和 CUP - 具 - 精华区 - 优秀的Free OS(Linux)版 - 北大未名BBS...

    发信人: chenhao (阅读文献), 信区: Linux 标  题: 编译器构造工具:安装 JFlex 和 CUP - 具体化的指南 发信站: 北大未名站 (2000年12月06日00:27:52 ...

  9. 在Linux下掌握arm和操作系统(1)--stm32和arm

    大家都知道,arm是卖IP,授权给芯片厂商,芯片厂商再增加外设等组成CPU/MCU/SOC生产销售. arm的发展历程网络上太多了,我也不多说.只要我们明确目前arm主要产品是armv7,armv8架 ...

最新文章

  1. linux c 遍历目录 及 目录下文件
  2. jQuery实现父窗口的问题
  3. 常用的函数式接口_Function接口_默认方法andThen
  4. [JavaWeb-Servlet]IDEA与Tomcat的相关配置
  5. php 常用的日期函数,常用php日期函数总结
  6. selenium持续集成_使用Selenium进行Spring Boot集成测试
  7. iangularjs 模板,AngularJS模板中的三元运算符
  8. [转】:Android调试工具及方法
  9. go mod常用命令
  10. php操作xml类,PHP实现的XML操作类【XML Library】
  11. 华为鸿蒙HarmonyOS-面向全场景的分布式操作系统
  12. 如何把google日历添加到桌面
  13. imdb数据集电影评论分类
  14. 《王亡於江上》之周昭王姬瑕
  15. Python 数据相关性分析
  16. CAD如何快速查找图纸的存放位置?怎么实现快速看图?
  17. [渝粤教育] 四川大学 模拟电子技术基础(Ⅰ) 参考 资料
  18. Vuetify中的v-pagination如何实现分页
  19. 我的世界服务器物品展示怎么得,我的世界怎么使用物品展示框
  20. 10办公软件软件分享

热门文章

  1. go waitgroup.done()异常处理_Go 异常处理
  2. python requests请求失败重试_Python Requests.post()请求失败时的retry设置
  3. SQL Server 中系统视图sysobjects中type字段的说明
  4. 内存管理,数据类型的基本使用与基本运算符(python2中与用户交互)
  5. 关闭页面那点事儿...
  6. 11/28 前端码农日报
  7. 行为驱动开发BDD概要
  8. K3删除物料时提示“物料在存货表-物料中....”
  9. Chrome OS 0.4.220 Beta下载已发布
  10. EWORD 0513