GCC是一族工具的集合,包含预处理器、编译器、汇编器、链接器。
对于默认的文件名,GCC可以自动选择工具自动完成文件处理过程。
从C语言的源程序道可执行文件,实质上是依靠GCC调用一系列工具完成的。

GCC默认处理的文件

文件类型 扩展名 文件说明
文本文件 *.c C源文件
文本文件 *.c C源文件
文本文件 *.cpp C++源文件
文本文件 *.i 预处理后的C源文件
文本文件 *.ii 预处理后的C++源文件
文本文件 *.s 汇编语言
文本文件 *.h 头文件
二进制文件 *.o 目标文件
二进制文件 *.so 动态库(共享库)
二进制文件 *.a 静态库(归档文件)

Binutils工具集合

Binutils是一个二进制工具集合,包含汇编、链接以及一系列的辅助工具。

工具名称 说明
as GNU汇编器。将处理器的汇编代码转换成可执行代码,并存储道目标文件.o文件中
ld GNU链接器。将一个或多个目标文件.o库组合成一个可执行程序;或者生成静态库和动态库
ar 归档工具,可以将多个文件组合成一个大文件,并且可以读取原始文件的内容
stripe 取出文件中的符号
nm 用来显示目标文件中的符号
objectcopy 转换成二进制代码的工具
objdump 显示目标文件的反汇编工具
readelf 显示ELF文件中的各种信息
string 显示文件中的可打印字符
ranlib 产生归档文件的索引,并将其保存到归档文件中,索引同时列出归档文件各成员所定义的可重分配目标文件
addr2line 可以将一个可执行程序的地址映射到源文件的对应行
gprof 显示程序调用段的各种数据

C语言编译工作流程

分为4步:
1、预处理:生成.i文件
2、编译:将预处理后的文件转换成汇编语言,生成文件.s
3、汇编:由汇编代码生成目标代码,即机器代码,生成可执行文件.o
4、链接:有各个文件的目标代码生成可执行程序

GNU工具以及GCC对C语言程序的处理流程相关推荐

  1. linux怎么运行gcc,在Linux下使用gcc运行C语言程序

    标签:终端   工具   gcc   程序   分区   编译   mod   没有   保存 Linux下使用最广泛的C/C 编译器是GCC,大多数的Linux发行版本都默认安装,不管是开发人员还是 ...

  2. 《编译与反编译技术》—第1章1.7节C语言程序的编译流程

    本节书摘来自华章出版社<编译与反编译技术>一书中的第1章,第1.7节C语言程序的编译流程,作者庞建民,陶红伟,刘晓楠,岳峰,更多章节内容可以访问云栖社区"华章计算机"公 ...

  3. 怎样用gcc编译c语言,使用GCC编译C语言程序

    使用Eclipse CDT开发C语言程序,虽然使用很方便,效率也很高,但是它向我们隐藏了很多细节.虽然大多数时候这并不影响我们的开发,但是当我们需要对程序的编译链接过程进行更加特殊的控制,以获得可以满 ...

  4. Linux GCC简明教程(使用GCC编译C语言程序)

    文章目录 Gedit 编辑器 GCC 编译器 1) 生成可执行程序 2) 运行可执行程序 完整的演示 分步骤编译 1) 编译(Compile) 2) 链接(Link) 市面上常见的 Linux 都是发 ...

  5. Linux GCC简明教程(使用GCC编写C语言程序)

    市面上常见的 Linux 都是发行版本,典型的 Linux 发行版包含了 Linux 内核.桌面环境(例如 GNOME.KDE.Unity 等)和各种常用的必备工具(例如 Shell.GCC.VIM. ...

  6. vss2010c语言怎么运行,在Linux下使用gcc运行C语言程序

    Linux下使用最广泛的C/C++编译器是GCC,大多数的Linux发行版本都默认安装,不管是开发人员还是初学者,一般都将GCC作为Linux下首选的编译工具.本教程毫不犹豫地使用GCC来编译C程序. ...

  7. Linux系统用gcc编写C语言程序

    涉及命令行和gcc文本编辑器,在安装好gcc的基础上进行 第一步:打开命令行终端 (快捷键ctrl+alt+t) 打开是这样的界面 第二步:在命令行输入命令:touch 文件名.c  后回车 (如:t ...

  8. 将如下c语言代码汇编成s文件,gcc编译c语言程序

    编译:当前源代码编译成二进制目标文件(.obj文件) 链接(link):将生成的.obj文件与库文件.lib等文件链接,生成可执行文件(.exe文件). 一个现代编译器的主要工作流程如下: 源程序(s ...

  9. C 语言程序的执行流程

    C 语言程序成为高级语言的原因是它能够读取并理解人们的思想.然而,为了能够在系统中运行 hello.c 程序,则各个 C 语句必须由其他程序转换为一系列低级机器语言指令.这些指令被打包作为可执行对象程 ...

最新文章

  1. python专科就业_利用Python分析复旦大学近五年转专业失败的情况
  2. Zabbix监控之常用snmp-OID
  3. rust安装教程linux,如何在 Linux 中安装 Rust 编程语言
  4. 计算机应用基础二00018,2019年10月自学考试00018《计算机应用基础》试题(二)
  5. ASP.NET 服务器控件授权
  6. 对齐输出(信息学奥赛一本通-T1003)
  7. JavaEE开发之SpringMVC中的自定义拦截器及异常处理
  8. 【250期门诊集锦】痛并快乐着的正则表达式
  9. EnterpriseDb公司的Postgres Enterprise Manager 安装图解
  10. springboot项目自定义注解实现的多数据源切换--亲测有效
  11. java类与对象实验报告心得体会_java实验报告心得体会
  12. Ubuntu/Linux/Unix 究竟有什么区别??
  13. Mysql同环比计算详解
  14. C语言重难点知识梳理与常见题目/项目游戏解析
  15. 新版标准日本语中级_第五课
  16. PTA-查询水果价格
  17. 画以载道:艺术演变的动力与社会思潮的嬗变
  18. Error while executing: am start -n(更换包名)
  19. c++运行时报Floating point exception错误
  20. CentOS 7 开机自启汇总

热门文章

  1. JSP + Struts + Hibernate + Spring+MySQL+Myeclipse实现固定资产管理系统
  2. python能不能用c打开文件_C/C++/Python等 使用二进制模式打开文件与不使用二进制模式的区别...
  3. css常用属性初总结:伪元素和伪元素
  4. NSMutableDictionary中 setValue和setObject的区别
  5. 笔记45 | 代码性能优化建议[转]
  6. Spark Streaming整合logstash + Kafka wordCount
  7. awk用法小结(作者总结)
  8. Mercurial hg web server的配置
  9. 【机器学习】EM最大期望算法
  10. SAP-MM:发票、贷方凭证、事后借记、后续贷记