前言:

GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。后来又
扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改
名GNU编译器套件(GNU Compiler Collection)。(百度百科,想了解自己查询)

一.GCC程序的编译过程大概分四个阶段

  • 预处理(Pre-Processing)
  • 编译(Compiling)
  • 汇编(Assembling)
  • 链接(Linking)

二.简单HelloWorld程序的编译过程

示例:HelloWorld.c

1 #include <stdio.h>
2 int main()
3 {
4   printf("Hello World!\n");
5   return 0;
6 }

Ctrl+Alt+T  --->打开控制台--->输入vim HelloWorld.c

1. 执行如下命令:$ gcc -o HelloWorld HelloWorld.c


运行如下 : $ ./HelloWorld
输出: HelloWorld!


2. 分步编译如下:
(1) $ gcc –E HelloWorld.c -o HelloWorld.i

可以输出HelloWorld.i文件中存放着HelloWorld.c经预处理之后的代码。打开HelloWorld.i文件,看一看,就明白了。后面那条指令,是直接在命令行窗口中输出预处理后的代码.

gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果。在本例中,预处理结果就是将stdio.h 文件中的内容插入到HelloWorld.c中了。


//预处理结束
//这时候你看一下HelloWorld.i ,可以看到插进去了很多东西。


(2) $ gcc –S HelloWorld.i

gcc的-S选项,表示在程序编译期间,在生成汇编代码后,停止,-o输出汇编代码文件。

查看下HelloWorld.s //生成汇编代码后结束

(3)生成汇编代码文件HelloWorld.s以后,需要gas汇编器负责将其编译为目标文件,如下:

$ gcc –c HelloWorld.c
或者:
$ gcc -c HelloWorld.c –o HelloWorld.o
或者:
$ gcc -c HelloWorld.i -o HelloWorld.o

//编译结束
//生成 HelloWorld.o文件

(4) $ gcc HelloWorld.o –o HelloWorld 生成连接,可执行文件(HellWorld重新生成的可执行文件)

gcc连接器是gas提供的,负责将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。

附加的目标文件包括静态连接库和动态连接库。

对于上一小节中生成的HelloWorld.o,将其与C标准输入输出库进行连接,最终生成程序HelloWorld可执行文件

输入命令:gcc HelloWorld.o –o HelloWorld--->生成如下图:

3. 多个程序文件的编译

一般情况一个程序都是有若干个文件源文件组成,所以编译的时候需要形成多个编译单元,使用GCC编译器可以将多个源文件编译成所需要的程序

比如:源文件有main.c     a.c     b.c  最终生成一个可执行的文件main

比如:一个工程有main.c a.c b.c生成test的可执行文件。
编译命令如下:
$ gcc –c main.c a.c b.c –o main
或者:
$ gcc –o main main.c a.c b.c

GCC仍然会按照预处理、编译和链接的过程依次进行

大概过程相当于:

gcc -c main.c -o main.o

gcc -c a.c -o a.o

gcc -c b.c -o b.o

最后:

gcc main.o a.o b.o -o main

转载于:https://www.cnblogs.com/JiYF/p/6104003.html

Linux系统GCC常用命令和GCC编译过程描述相关推荐

  1. linux命令实验设备,实验二 Linux系统的常用命令

    实验二Linux系统的常用命令 一.实验目的 1.X-windows的简单配置,掌握进入命令行模式和图形化模式的方法2.GNOME桌面的使用,包括注销与登录,系统信息的查看,GNOME下软件的使用3. ...

  2. Linux系统中常用命令行命令、快捷键、创建长路径的快捷键

    Linux系统中常用命令行命令.快捷键.创建长路径的快捷键 1.常用Linux命令: 1.1 文件和目录: cd /home 进入 '/home' 目录 cd - 返回上一级目录 cd -/- 返回上 ...

  3. GCC常用命令及GCC编译器背后的故事

    文章目录 一. GCC常用命令 1. 简介 2. 简单编译 2.1 预处理 2.2 编译为汇编代码(Compilation) 2.3 汇编(Assembly) 2.4 连接(Linking) 3. 多 ...

  4. gcc常用命令与gcc编译器背后的故事

    目录 1 gcc常用命令 1.1 简介 1.2 简单编译 1.2.1 预处理 1.2.2 编译为汇编代码(Compilation) 1.2.3 汇编(Assembly) 1.2.4 连接(Linkin ...

  5. Linux系统编程常用命令总结

    目录 一.Linux常用命令 1.常用工具 2.目录和文件命令 3.安装和卸载软件命令 4.压缩包管理 5.文件属性.用户用户组及查找与检索命令 6.网络管理命令 7.其他命令 二.Linux vi/ ...

  6. Linux系统的常用命令的使用

    常用的命令使用方法: 1.echo echo - display a line of text 经过man手册帮助后获得更精准的命令操作方法 将字符串输出到显示设备上 常用选项: -n:不换行 ,如图 ...

  7. linux设备巡检指令,Linux系统巡检常用命令

    Linux系统需要定期巡检,以检查服务器软硬件使用情况,相当于对人的体检,确保可以及时发现问题.解决问题,降低损失,常用的巡检命令如下: # uname -a # 查看内核/操作系统/CPU信息 # ...

  8. linux 检测wan命令,Linux系统监控常用命令

    释放双眼,带上耳机,听听看~! 1.free free 命令显示系统使用和空闲的内存情况,包括物理内存.交互区内存(swap)和内核缓冲区内存. $ free (-buffers/cache) use ...

  9. Linux系统认知——常用命令(全)

    文章目录 一.帮助命令 1.man(查看帮助手册) 2.info(阅读 info 格式的文档) 3.whatis(查询命令功能) 二.文件及目录相关命令 1.touch(创建新的空文件,改变已有文件的 ...

  10. linux运维常用巡检表格,Linux系统巡检常用命令

    Linux系统需要定期巡检,以检查服务器软硬件使用情况,相当于对人的体检,确保可以及时发现问题.解决问题,降低损失,常用的巡检命令如下: # uname -a # 查看内核/操作系统/CPU信息 # ...

最新文章

  1. string生成固定长度的哈希_Redis 选择Hash还是String 存储数据?
  2. 风险度量之[下行风险]
  3. A Famous Music Composer
  4. Linux系统中CPU使用率查询常用的5个命令
  5. oracle不足位数补0
  6. 树莓派dht11上云_树莓派使用 DHT11 / DHT22 温湿度传感器
  7. 拿了年终奖后,发现自己又拖后腿了?对不起,可能事实并没有那么糟糕...
  8. java人脸识别更新:摄像头支持360、火狐和谷歌浏览器
  9. Jenkins修改管理员密码
  10. sinh_带有Python示例的math.sinh()方法
  11. 刘朋:从技术到管理 - 团队制胜六步工作法(开篇)
  12. 彼尔盖茨的十句话,绝对让你改变一生
  13. zip()和enumerate()用于for-in中遍历可迭代对象
  14. DRF之认证组件源码解析
  15. html5学习笔记6-- canvas
  16. 比较ole db/odbc/ado/ado.net/jdbc
  17. 如何让测试RFC2544更便捷——RFC2544测试实操
  18. error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools“:
  19. base64编码将字符串转换为图片
  20. 自然语言处理总复习(五)—— 词义消歧

热门文章

  1. Centos7下搭建单节点Zookeeper
  2. ES6新特性总结之解构赋值和字符串模板
  3. Ubuntu16.04安装Docker 入门
  4. [Shell Programmin] ZSH
  5. 数数苹果手机中的不科学
  6. OSSIM安装zabbix
  7. IEEE 你吃透了吗?
  8. ScrollView嵌套Gridview或者listview滚动问题
  9. Luogu2992[USACO10OPEN] Triangle Counting
  10. python输入一系列的值_python中的input()和print()输入输出函数应用实例笔记