工具链软件包括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工具链简述的更多相关文章
-
更换gcc工具链
title: 更换gcc工具链 date: 2019/1/16 19:27:51 toc: true --- 更换gcc工具链 下载后解压到一个临时目录先看看文件结构 mkdir tmp tar xj ...
-
Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法
一.安装ARM-Linux-GCC工具链 只需要一句命令: sudo apt-get install gcc-arm-linux-gnueabi 前提是你的Ubuntu系统版本是官网支持的最新的版本, ...
-
【转】Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法
原文网址:http://www.cnblogs.com/muyun/p/3370996.html 一.安装ARM-Linux-GCC工具链 只需要一句命令: sudo apt-get install ...
-
为DS5添加新的gcc工具链
环境: 步骤: 1.下载mingw32版本的工具链 下面有两个下载工具链的网站: ARM官网的: https://developer.arm.com/tools-and-software/open-s ...
-
go 工具链目前[不支持编译 windows 下的动态链接库]解决方案
go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2].想要产生dll,可以这样 workaround ,参考 golang [issuse#11058][ ...
-
go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2]
go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2].想要产生dll,可以这样 workaround ,参考 golang [issuse#11058][ ...
-
xmake v2.5.2 发布, 支持自动拉取交叉工具链和依赖包集成
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能 ...
-
gcc 交叉工具链中工具使用(arm-linux-xxx)
在Ubuntu系统中使用 gcc 系列工具是在PC机上使用 arm-linux-gcc 编译的目标 是在 arm CPU上使用 一.安装交叉编译工具链 1. 编译工具怎么获取 1)从官网 http:/ ...
-
交叉编译工具链bash: gcc:no such file or directory
在进行交叉编译工具链安装时,有三种方法: 1.源码编译,手动安装 2.二进制可执行文件直接安装 3.直接解压工具链,手动修改环境变量 为了方便,我们多用方法3进行安装.但是问题来了,你的工具链制作时有 ...
随机推荐
-
Linux 如何实现 VLAN - 每天5分钟玩转 OpenStack(12)
LAN 表示 Local Area Network,本地局域网,通常使用 Hub 和 Switch 来连接 LAN 中的计算机.一般来说,两台计算机连入同一个 Hub 或者 Switch 时,它们就在 ...
-
ubuntu&;FAQ
转自-笨小孩 查看进程: ,ps -e 命令 ,feng@feng:~$ sudo netstat -antup Active Internet connections (servers an ...
-
P137、面试题23:从上往下打印二叉树
题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印.例如输入如图的二叉树,则依次打印出8,6,10,5,7,9,11.(其实是按层遍历)二叉树结点的定义如下:struct Bin ...
-
CMake交叉编译配置
很多时候,我们在开发的时候是面对嵌入式平台,因此由于资源的限制需要用到相关的交叉编译.即在你host宿主机上要生成target目标机的程序.里面牵扯到相关头文件的切换和编译器的选择以及环境变量的改变等 ...
-
2014.11.12模拟赛【最小公倍数】| vijos1047最小公倍数
最小公倍数(lcm.c/.cpp/.pas) 题目描述 给定两个正整数,求他们的最小公倍数. 样例输入 28 12 样例输出 84 数据范围 对于40%数据:1<=a,b<=10^9 对于 ...
-
THINKCMF-NGINX伪静态
location / { index index.php index.html index.htm; if (!-e $request_filename) { rewrite ^/index.php( ...
-
linux(十二)之用户管理
前面学习了那么多关于linux的东西,相信大家都对linux应该 有一个大概的了解了.现在给大家分享的是linux中的用户管理,接下来让我们进入正题吧! 今天其实放松了一整天了,有点后悔自己没有把这些 ...
-
List集合在遍历过程中的删除
List集合在遍历过程中的删除:[1,1,2,3,4,5] for循环正续会漏掉一个1 for(int i=0;i<list.size();i++){ if(list.get(i).equals ...
-
using MR to compute PageRank
In this post I explain how to compute PageRank using the MapReduce approach to parallelization. This ...
-
Oracle的rollup、cube、grouping sets函数
转载自:https://blog.csdn.net/huang_xw/article/details/6402396 Oracle的group by除了基本用法以外,还有3种扩展用法,分别是rollu ...