Linux编译器——gcc

Linux编译器——GCC

1、GCC简介

GCC(GNU Compiler Collection)是GUN开发的一套编译器集合,因为我们做嵌入式的都知道GCC不仅仅可以编译c语言,还能编译其他如g++、Ada等其他语言,而且GCC还支持不同的处理器,我们在做交叉编译器的时候就知道,在x86上用GCC编译的程序会拿到arm、atmel、mips等处理器上。

2、GCC组成部分

GCC由三部分组成。

  • Binutils:
    它是一组开发工具。这个软件包依赖于不同的目标机的平台。因为不同目标机的指令集是不一样的,比如 arm 跟 x86 就不一样,如下列出binutils的部分工具,还有需要可自行搜索。

    • addr2line:
      给出一个可执行文件的内部地址,addr2line 使用文件中的调试信息将地址翻泽成源代码文件名和行号。
    • ar:
      这是一个程序,可通过从增加、删除和析取文件来维护库文件。通常使用该工具是为了创建和管理连接程序使用的目标库文档。具体的信息可以看看gcc中ar到底怎么操作库的。
    • as:
      GNU 汇编器。实际上它是一族汇编器,因为它可以被编泽或能够在各种不同平台上工作。
    • ld:
      GNU 连接程序。该程序将目标文件的集合组合成可执行程序。
    • make:
      一个工具程序,它会读 makefile 脚木来确定程序中的哪个部分需要编泽和连接,然后发布必要的命令。
    • gdb:
      GNU 调试器,可用于检查程序运行时的值和行为。
  • gcc-core:
    GCC 的核心部分,这部分是只包含 c 的编译器及公共部分,而对其他语言(C++、Ada 等)的支持包需要另外安装,这也是 GCC 为何如此强大的重要原因 。gcc-core依赖于 Binutils。

  • libc:
    包含了主要的 c 库,这个库提供了基本的例程,用于分配内存,搜索目录,读写文件,字符串处理等等。常见了uclibc、glibc等等。

区别
  • arm-linux-gcc
    x86 跟 ARM 处理器不一样,所以binutils是不一样的,因为gcc-core是依靠binutils的,所以也不一样,glibc 一个 c 库,最终是以库的形式存在于编译器中,自然 ARM 所使用的 glibc 库跟 x86 同样也不一样。
  • arm-elf-gcc
    arm-elf-gcc 跟 arm-linux-gcc,虽然都是在arm上的,但是他的库还是用得不一样的,arm-linux-gcc 使用 GNU 的 Glibc,而 arm-elf-gcc 一般使用 uClibc/uC-libc 。arm-linux-* 和 arm-elf-*区别主要表现在C语言库的实现上,例如不同系统调用,不同的函数集实现,不同的ABI/启动代码以及不同系统特性等微小的差别。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值