GCC 编译器在编译一个C语言程序时需要经过以下 4 步:

  1. 将C语言源程序预处理,生成.i文件。
  2. 预处理后的.i文件编译成为汇编语言,生成.s文件。
  3. 将汇编语言文件经过汇编,生成目标文件.o文件。
  4. 将各个模块的.o文件链接起来生成一个可执行程序文件。

GCC 编译流程如下图所示:

.i文件、.s文件、.o文件可以认为是中间文件或临时文件,如果使用 GCC 一次性完成C语言程序的编译,那么只能看到最终的可执行文件,这些中间文件都是看不到的,因为 GCC 已经经它们删除了。

当然,可以使用 GCC 选项看到这些中间文件,下节我们会讲解 GCC 选项。

linux下使用gcc命令编译代码

gcc命令提供了非常多的命令选项,但并不是所有都要熟悉.初学时掌握几个常用的就可以了,到后面再慢慢学习其他命令选项.

一,常用编译命令选项

假设源程序文件名为test.c

1.无选项编译链接

用法: #gcc test.c

作用: 将test.c预处理 汇编 编译 并链接形成可执行文件。这里未指定输出文件,默认输出为a.out 编译成功后可以看到生成了一个a.out的文件.在命令行输入./aout 执行程序 。 ./表示在当前目录, a.out为可执行程序文件名

2.选项 -o

用法: #gcc test.c -o test

作用: 将test.c预处理 汇编 编译并链接形成可执行文件test 。 -o选项用来指定输出文件的文件名。输入./test执行程序

3.选项 -E

用法: #gcc -E test.c -o test.i

作用: 将test.c 预处理输出test.i 文件

4.选项 -S

用法: #gcc -S test.i

作用: 将汇编输出文件test.i 汇编成 test.s 文件

5.选项 -c

用法: #gcc -c test.s 编译输出 test.o 文件

6.选项 -0

用法: #gcc -01 test.c -o test

作用: 使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,单编译时间越长,输出./test执行程序

二 多源文件的编译方法

如果有多个源文件,基本上有两种编译方法:

[假设有两个源文件为test.c 和 testfun.c]

1.多个文件一起编译

用法: #gcc testfunc.c test.c -o test

作用: 将testfun.c 和test.c 分别编译后 链接成 test可执行文件.

2.分别编译各个源文件,之后对编译后输出的目标文件链接

用法: #gcc -c testfunc.c //将testfun.c 编译成testfun.o

  #gcc -c test.c //将test.c 编译成 test.o

  #gcc -o testfunc.o test.o -o test //将testfun.o和test.o 链接成 test

以上两种方法比较,第一种方法编译是需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译.

转: http://c.biancheng.net/view/663.html

https://wenku.baidu.com/view/7ae93b68a45177232f60a2c6.html

最新文章

  1. Spring学习记录(三)---bean自动装配autowire
  2. java比较两个对象是否相等的方法
  3. Java实现文件复制的四种方式
  4. Kaiju: Fast and sensitive taxonomic classification for metagenomics
  5. YYKit之YYText
  6. 用python爬虫抓站的一些技巧总结
  7. 关于C语言中的强符号、弱符号、强引用和弱引用的一些陋见,欢迎指正
  8. C++ 内部排序(一)
  9. vue 验证电话
  10. MyEclipse破解步骤
  11. Idea项目上传git(与git结合使用)
  12. python 第三方扩展库的安装
  13. Java客户端连接kafka集群报错
  14. BZOJ 4521 [CQOI2016]手机号码 - 数位DP
  15. Maven 入门——Maven 的安装和配置
  16. 玩转rocketMQ
  17. Smokeping配置
  18. 编译图像质量分析库iqa
  19. c# 调用服务返回结果模板化
  20. SpringBoot程序启动时执行初始化代码

热门文章

  1. Python标准库3.4.3-webbrowser-21.1
  2. 每日一题-——LeetCode(486) 预测赢家
  3. 22 Jquery 事件
  4. 带有EXE参数的启动
  5. Selenium常用API的使用java语言之7-控制浏览器操作
  6. 50、[源码]-Spring容器创建-Bean创建完成
  7. unsafe包的学习和使用
  8. hive表的DDL
  9. Linux 内核参数说明
  10. Microsoft.Jet.OLEDB.4.0读取EXCEL数据