gcc工具链简述

摘要:
工具链软件包括BINUTILS、GCC、GLIBC、GDB等。BINUTILS是一种二进制程序处理工具,包括链接器、汇编程序和其他对象程序处理工具。完整的GCC需要支持glibc。GDB是一个调试工具,它可以读取可执行程序中的符号表,并调试程序的源代码。elf文件由几个段落组成。

工具链软件包括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工具链简述》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CHAR,TCHAR,WCHAR 三者的区别与转换JavaWeb项目操作Excel(导出、解析)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux安装python3

--linux安装python3 centos系统本身默认安装有python2.x,可通过python --version 查看系统自带的python版本,有一些系统命令需要用到python2,安装python3时不能卸载python2。 1、安装依赖包                                                   ...

Ubuntu 安装使用yum--转载

Ubuntu缺省情况下,并没有提供C/C++的编译环境,因此还需要手动安装。 如果单独安装gcc以及g++比较麻烦,幸运的是,为了能够编译Ubuntu的内核,Ubuntu提供了一个build-essential软件包。 查看该软件包的依赖关系,可以看到以下内容: $ apt-cache depends build-essential build-essen...

centos下安装Vmware-tools时出现的问题

今天装了centos,想共享一个文件,需要安装Vmware-tools。 正常的步骤: 安装Vmware-tools 1、挂载VMwareTools光驱。虚拟机选项栏中选【虚拟机】-->【安装vmware tools】 2、解压。将光驱中VMware Tools-XXXXXX.tar.gz到指定文件夹 3、安装。运行脚本vmware-inst...

【华为云技术分享】鲲鹏弹性云服务器GCC交叉编译环境搭建指南

南七技校林书豪 1、简介 交叉编译,简单地说,就是在一个平台上生成另一个平台上的可执行代码。本指南主要内容为在非ARM架构服务器环境下搭建ARM的GCC编译环境,编译基于ARM架构的应用软件。交叉编译工具链是为了编译、链接、处理和调试跨平台体系结构的程序代码。除了体系结构相关的编译选项以外,其使用方法与Linux主机上的GCC相同。 搭建交叉编译环境,即安...

gcc/g++编译

1. gcc/g++在执行编译工作的时候,总共需要4步 (1).预处理,生成.i的文件[预处理器cpp] (2).汇编,将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs] (3).编译,将汇编语言文件编译为目标代码(机器代码)生成.o的文件[汇编器as] (4).链接,将目标代码,生成可执行程序[链接器ld] [参数详解]   -x lang...

把GCC的编译信息重定向到一个文件

最近在Linux下进行编程,很多写好的代码要进行编译。在链接很多文件的时候,经常会出现很多的错误,而Linux下终端显示是有限的,因此每次调试的时候如果错误太多就会很不方便。如果使用简单的管道重定向如下: gcc -c test.c > error.txt 这种方式是不行的。   我上网找相关的方法,发现很多人在问,找到的信息也比较少。有些方法甚至要...