GCC编译C源代码有四个步骤:预处理—->编译—->汇编—->链接。

可以利用GCC的参数来控制执行的过程,这样就可以更深入的了解编译C程序的过程。

下面将通过对一个程序的编译来演示整个过程。

#include

int main()

{

printf("happy new year!\n");

return 0;

}

1:预处理:编译器将C程序的头文件编译进来,还有宏的替换,可以用gcc的参数-E来参看。

预处理 命令:gcc -E hello.c -o hello.i

作用:将hello.c预处理输出hello.i

2:编译:这个阶段编译器主要做词法分析、语法分析、语义分析等,在检查无错误后后,把代码翻译成汇编语言。可用gcc的参数-S来参看。

编译器(ccl)将文本文件hello.i 翻译成文本文件hello.s, 它包含一个汇编语言程序。汇编语言程序中的每条语句都以一种标准的文本格式描述了一条低级机器语言指令。

编译命令:gcc -S hello.i -o hello.s

作用:将预处理输出文件hello.i汇编成hello.s文件

3:汇编:把编译阶段生成的.s 文件转换为二进制目标代码。可用gcc的参数-c来参看。汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成可重定位目标程序的格式, 并将结果保存在目标文件hello.o中。hello.o文件是一个二进制文件,它的字节编码是机器语言。

汇编 命令:gcc -c hello.s -o hello.o

作用:作用:将汇编输出文件hello.s编译输出hello.o文件

4:链接:把obj文件链接为可执行的文件:链接器(ld)负责.o文件的并入。结果就是hello文件,它是一个课执行的目标文件,可以加载到存储器后由系统调用。

链接命令:gcc hello.o -o hello

一步操作的话是: (-o必须在hello之前 )

$gcc hello.c -o hello

$./hello或者:(会默认生成a.out文件)

$gcc hello.c

$./a.out

linux gcc编译c文件头文件,使用GCC编译器编译C语言相关推荐

  1. 文件头文件尾全面总结

    目录 文件头文件尾汇总: PNG (png) zip文件 文件头文件尾汇总: 文件类型 文件头 文件尾 特征 JPEG (jpg) FFD8FF FF D9 ÿØÿà PNG (png) 89504E ...

  2. 杂项 文件头文件尾总结

    文件名 文件头 文件尾 JPEG(jpg), 文件头:FFD8FF 文件尾:FF D9 PNG(png), 文件头:89504E47 文件尾:AE 42 60 82 GIF(gif), 文件头:474 ...

  3. 【CTF杂项】常见文件文件头文件尾格式总结及各类文件头

    文件头文件尾总结 JPEG (jpg),                         文件头:FFD8FF 文件尾:FF D9 PNG (png),                         ...

  4. Linux下开源库的使用(共享库文件头文件配置全局搜索)(WSL)

    关键词 g++; vscode; c++; pkg-config; include; lib; linux; .pc; tasks.json; launch.json; WSL 前言 需求及手动解决方 ...

  5. Java根据文件头文件信息判断文件类型

    InputStream in = file.getInputStream(); //根据文件头获取文件类型 String type = FileType.getFileType(in); 注意file ...

  6. java 文件头 文件类型 files_根据文件头数据判断文件类型

    现有一文件,其扩展名未知或标记错误.假设它是一个正常的.非空的文件,且将扩展名更正后可以正常使用,那么,如何判断它是哪种类型的文件? 在后缀未知,或者后缀被修改的文件,依然通过文件头来判断该文件究竟是 ...

  7. 常见文件头 文件幻数

    JPEG (jpg),文件头:FFD8FF PNG (png),文件头:89504E47 GIF (gif),文件头:47494638 TIFF (tif),文件头:49492A00 Windows ...

  8. linux gcc strip 去文件头工具

    作为一名Linux开发人员, 如果没有听说过strip命令, 那是很不应该的. strip这个单词, 大家应该早就学过了, 你就记住是脱衣服就行了, 别的不要多想. 在linux中, strip也有脱 ...

  9. 3gpp文件头文件解析_居于LLVM 的命令行参数解析

    在写命令行程序的时候经常需要解析各种命令行参数.打印help信息等,觉得非常的麻烦.今天介绍一种超级棒的命令参数解析的方法:居于LLVM 的命令行参数解析,有了它妈妈再也不用担心我不会解析命令行参数^ ...

最新文章

  1. 用matlab怎么画视电阻率拟断面图,在MATLAB平台上实现可控源音频大地电磁反演数据三维可视化显示...
  2. R语言使用magick包的image_write函数将已有图像以任何指定的格式导出保存到磁盘上(例如将原文将从png转化为jpeg)
  3. php把数组函数封装,PHP删除Array数组里指定的key(完整版,已封装成函数,附测试代码)...
  4. linux的编程命令,linux编程常用命令
  5. 论文笔记:PointSIFT
  6. JAVA JFrame编程
  7. 一切问题的解决都离不开人
  8. slf4j相关的配置信息
  9. 浅谈JVM垃圾回收机制
  10. 大公司和小公司的抢人战,孰胜孰负?
  11. fseek 函数(易懂)
  12. Windows XP SP3安装教程(图)
  13. error: .repo/manifests/: contains uncommitted changes 解决办法
  14. JavaFX之Scene Builder的使用(开发一款GUI小工具原来这么简单)
  15. 【Unity3d】在Unity3d中使用百度AI人脸识别功能
  16. layui按钮---Layer自定义按钮,关闭弹出层/弹窗;layer自带按钮
  17. 华为网工入门之eNSP小实验(2)--DNS(Domain Name System)域名系统
  18. 云原生第4课:Kubernetes 集群管理
  19. windows上架app store
  20. 广发银行信用卡分期你真的懂?一文带你了解什么是广发分期

热门文章

  1. GetLastError返回值的意义----适用在eVC和VC++
  2. 五百字简文告诉你美国为何要倾一国之力对中国的一家民营企业华为痛下杀手?...
  3. 数据仓库-数据仓库的简介(由来、与关系数据库的区别、数据仓库模型)
  4. luoguP1082同余方程
  5. 配置中心框架IConfCenter
  6. 数据脱敏项目中遇见的问题
  7. hadoop: Shuffle过程详解 (转载)
  8. TableCellRenderer TableCellEditor(三)
  9. 回归!这里才是我们的天堂
  10. Linux 常见命令