工具链软件包括BINUTILS、GCC、GLIBC、GDB等。

BINUTILS是二进制程序处理工具,包括链接器、汇编器等目标程序处理的工具。

GCC(GNU Compiler Collection)是编译器。对于C/C++语言的完整支持,需要支持glibc库。

GLIBC是应用程序编程的函数库软件包,可以编译生成静态库和共享库。完整的GCC需要支持glibc。

GDB是调试工具,可以读取可执行程序中的符号表,对程序进行源码调试。

默认情况下,GNU编译器生成的目标文件格式为elf格式。

elf文件由若干段(section)组成。

C:.text(正文段)包含程序的指令代码

.data(数据段)包含固定的数据,如常量、字符串

.bss(未初始化数据段)未初始化变量、数组等。

C++:.fini(析构函数代码)

.init(构造函数代码)

链接生成的elf格式文件还不能直接下载到目标平台上执行,可通过objcopy工具生成最终二进制文件。

链接器的任务就是将多个目标文件的.text、.data、.bss等段连接在一起,而连接脚本告诉链接器从什么地址开始放置这些段。

1. Binutils

由汇编器(as)产生的目标代码(*.o)是不能直接在computer上运行的,它必须经过链接器(ld)的处理才能生成可执行代码。

#ld –s –o test test.o

2. add2line

将地址转换成文件名或行号对,以便调试程序

3.  ar 从文件中创建、修改、扩展文件

4.  gasp 汇编宏处理器

5.  nm  从目标文件列举所有变量

6.  objcopy  使用GNU BSD库

把目标文件的内容从一种文件格式复制到另一种格式的目标文件中。

7. objdump  显示目标文件信息

可发编译二进制文件,也可以对对象文件进行反汇编,并查看机器代码。

8. readelf 显示elf文件信息

9. ranlib 生成索引以加快对归档文件的访问,并将其保存到这个归档文件中。

10. size 列出目标模块或文件的代码尺寸。

11. strings 打印可打印的目标代码符号(至少4个字符)

12. strip 放弃所有符号连接,一般应用程序最终都要strip处理

13. C++filt 链接器ld通过该命令可过滤C++符号和JAVA符号,防止重载函数冲突。

14. gprof 显示程序调用段的各种数据

gcc工具链简述的更多相关文章

  1. 更换gcc工具链

    title: 更换gcc工具链 date: 2019/1/16 19:27:51 toc: true --- 更换gcc工具链 下载后解压到一个临时目录先看看文件结构 mkdir tmp tar xj ...

  2. HC32L110(三) HC32L110的GCC工具链和VSCode开发环境

    目录 HC32L110(一) HC32L110芯片介绍和Win10下的烧录 HC32L110(二) HC32L110在Ubuntu下的烧录 HC32L110(三) HC32L110的GCC工具链和VS ...

  3. Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法

    一.安装ARM-Linux-GCC工具链 只需要一句命令: sudo apt-get install gcc-arm-linux-gnueabi 前提是你的Ubuntu系统版本是官网支持的最新的版本, ...

  4. 【转】Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法

    原文网址:http://www.cnblogs.com/muyun/p/3370996.html 一.安装ARM-Linux-GCC工具链 只需要一句命令: sudo apt-get install ...

  5. HK32F030MF4P6的Linux GCC工具链和VSCode开发环境

    HK32F030MF4P6简介 航顺的 HK32F030MF4P6, TSSOP20封装, Arm Cortex M0 内核, 内建32MHz时钟, 16K Flash, 2K RAM(实际上可用的有 ...

  6. 为DS5添加新的gcc工具链

    环境: 步骤: 1.下载mingw32版本的工具链 下面有两个下载工具链的网站: ARM官网的: https://developer.arm.com/tools-and-software/open-s ...

  7. go 工具链目前[不支持编译 windows 下的动态链接库]解决方案

    go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2].想要产生dll,可以这样 workaround ,参考 golang [issuse#11058][ ...

  8. go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2]

    go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2].想要产生dll,可以这样 workaround ,参考 golang [issuse#11058][ ...

  9. xmake v2.5.2 发布, 支持自动拉取交叉工具链和依赖包集成

    xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能 ...

随机推荐

  1. 暑假训练round2 D: 好序列(Manacher)

    Problem 1061: 好序列 Time Limits:  1000 MS   Memory Limits:  65536 KB 64-bit interger IO format:  %lld  ...

  2. 【转】各版本IIS下ASP.net请求处理过程区别

    原文地址:http://www.cnblogs.com/fsjohnhuang/articles/2332074.html ASP.NET是一个非常强大的构建Web应用的平台,它提供了极大的灵活性和能 ...

  3. 用php随机生成福彩双色球号码的2种方法

    不瞒您说,俺也是个双色球爱好者,经常买,但迟迟没有中过一等奖,哈哈.这里为大家介绍用php随机生成福彩双色球号码的二种方法,供朋友们学习参考.新的一年,祝大家中大奖,发大财. 方法一 复制代码代码如下 ...

  4. IT运维的五大基础知识

    IT运维的五大基础知识 | 浏览:331 | 更新:2014-09-25 11:36 IT运维对于很多企业都很重要,接下来运维的一些基础知识天天客服IT运维总监龙少文,就给大家介绍下IT运维的基础知识 ...

  5. ecshop退款订单原理分析

    ecshop退款订单原理分析 时间:2013-04-12 23:41来源:www.chinab4c.com 作者:ecshop专家 点击:799 咨询qq:760868471咨询旺旺 ecshop退款 ...

  6. php concurrence

  7. delphi 创建DBASE和FOXPRO两类DBF数据文件的差异

    delphi 创建DBASE和FOXPRO两类DBF数据文件的差异,主要有几点: 1.创建方法不同 DBASE的创建方法: Self.Table1.Close; Self.Table1.Active ...

  8. php数据缓存

    用php进行微信开发时,碰到access_token长久保存的问题,以前都是用框架里的Cache直接set.get一下就完了.现在没框架可用了,只好自己动手写一个cache暂时用. 这个Cache类用 ...

  9. [daily][device][bluetooth] 蓝牙怎么办!(archlinux下驱动蓝牙鼠标,以及三星手机)

    去年地摊买的破无线鼠标坏掉了.看上微软的Designer Mouse蓝牙鼠,但是买之前我要确认我能不能驱起来. 这款鼠标只支持蓝牙4.0.系统支持windows8以上,不支持xp和windows7. ...

  10. Python之 continue继续循环和多重循环

    Python之 continue继续循环 在循环过程中,可以用break退出当前循环,还可以用continue跳过后续循环代码,继续下一次循环. 假设我们已经写好了利用for循环计算平均分的代码: L ...