在Linux系统下C语言编译过程的四个步骤_linux下编写一个c程序的基本过程分为几部分?-程序员宅基地

技术标签: C语言  

1. 简介

C语言程序从源代码到可执行文件(二进制文件)都经历了那些过程?本文以Linux下C语言的编译过程为例,讲解C语言程序的编译过程。
以hello.c文件为例:

#include <stdio.h>
int main(){
    printf("hello world!\n");
}

在linux下编译C程序:

$ gcc hello.c -o hello # 编译
$ ./hello # 执行
hello world! # 输出文本

2. 编译的步骤

gcc命令编译C语言的过程中依次执行了四步操作:

  1. 预处理(Preprocessing)
  2. 编译(Compilation)
  3. 汇编(Assemble)
  4. 链接(Linking)
    在这里插入图片描述
2.1 预处理(生成.i文件)

预处理器对源代码其进行一些文本性质的操作, 主要任务包括:

  1. 删除注释
  2. 插入被 #include 指令包含的文件内容
  3. 替换由 #define 定义的符号
  4. 确定代码的部分内容是否应该根据一些条件编译指令进行编译

预处理会生成一个.i的文件。

命令:

gcc -E hello.c -o hello.i
2.2 编译(生成.s文件)

编译器gcc把预处理后的文件进行语法分析、语义分析以及优化后生成汇编代码文件

命令:

gcc -S hello.i -o hello.s
2.3 汇编(生成.o文件)

汇编器把汇编代码文件转换成中间目标文件
命令:

gcc -c hello.s -o hello.o  // 注意:此处-c为小写
2.4 链接(生成可执行文件)

链接器把目标文件与所需要的附加的目标文件(如静态链接库、动态链接库)链接起来成为可执行的文件
命令:

gcc hello.o -o hello
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Cuienjie/article/details/106763192

智能推荐

JAVA 中的 Random() 函数_random true-程序员宅基地

文章浏览阅读182次。Java 中存在着两种 Random 函数用来产生随机数 , 分别是 java.lang.Math.random() 和 java.util.Random() , 下面分开介绍java.lang.Math.random()调用这个 Math.Random() 函数能够返回带正号的 double 值 , 该值大于等于 0.0 且小于 1.0 , 即取值范围是 [0.0,1.0) 的左闭右开区间 ..._random true

股票质押式回购 非担保交收 结算备付金 B股转H股_非担保交易-程序员宅基地

文章浏览阅读2.5k次。 股票质押式回购股票质押式回购交易(简称“股票质押回购”)是指符合条件的资金融入方(简称“融入方”)以所持有的股票或其他证券质押,向符合条件的资金融出方(简称“融出方”)融入资金,并约定在未来返还资金、解除质押的交易。股票质押回购的回购期限不超过3 年,回购到期日遇非交易日顺延等情形除外。业务流程如下: 1、融入方、融出方、证券公司各方签署《股票质押回购交易业务协议》;2、证券..._非担保交易

反激变换器衍生拓扑对比分析_非对称反激-程序员宅基地

文章浏览阅读747次,点赞15次,收藏17次。在非对称反激变换器中,上管导通时,变压器和谐振电容同时储存能量,当能量从原边向次级传输时,原边串联的谐振电容和变压器储存的能量,同时向输出负载传输,因此,变压器得到利用的利用,变压器的尺寸可以显著的减小。(1)有源箝位反激变换器的变压器需要储存输出所需的所有能量,由于输入电压通常在一定的范围内变化,因此变压器无法工作在最优的状态,变压器也无法进行最优化的设计。、有源箝位反激变换器中,当负载降低到某一值时,系统会退出有源箝位的工作方式,效率会降低,同时会对次级整流管产生高的电压应力。_非对称反激

WIFI 认证 测试_11n认证用例-程序员宅基地

文章浏览阅读7.3k次。IEEE 802.11a/b/g双频带WorldRadio设计已经完成Wi-Fi多媒体(WMM,Wi-Fi multimedia)的Wi-Fi认证。   WMM通过控制网络音频、视频与数据的优先传送次序与缩短延迟时间提供给无线多媒体应用卓越的服务品质(QoS, Quality of Service),这个认证程序同时也可以确保取得WMM 认证的产品具有互通性,将有助于Wi-Fi 技术在消费_11n认证用例

32.Python从入门到精通—Python错误输出重定向和程序终止 字符串正则匹配 访问 互联网 日期和时间-程序员宅基地

文章浏览阅读5.4k次,点赞28次,收藏24次。接下来使用re模块中的findall函数进行匹配,它会返回一个列表,其中包含了所有符合模式的子串。最后输出匹配结果,可以看到输出的结果是一个列表,其中包含了所有匹配到的单词。除了findall函数之外,re模块还提供了其他一些函数,用于进行字符串正则匹配,例如search函数、match函数、sub函数等等。除了这些基本操作之外,datetime模块还提供了许多其他的日期和时间操作,例如时区转换、日期和时间的加减、日期和时间的比较等等。在上面的代码中,如果程序遇到异常,它将打印错误信息并以状态码1退出。

【送书福利-第二十五期】《AI时代系列书籍》-程序员宅基地

文章浏览阅读4.4w次,点赞37次,收藏35次。【送书福利-第二十五期】《AI时代系列书籍》

随便推点

Eclipse中运行JSP程序(J2ee第三天学习记录)_eel3 shij-程序员宅基地

文章浏览阅读5.3k次,点赞8次,收藏27次。之前写的jsp学习记录,感觉没什么干货,大家随便看看吧_eel3 shij

约瑟夫问题的几种解法_yue se fu ying shi li yu ruan shi li-程序员宅基地

文章浏览阅读2.5k次。问题来历据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个_yue se fu ying shi li yu ruan shi li

win10安装pyskl配置环境,软件安装等mmdet(1)_pyskl 环境配置-程序员宅基地

文章浏览阅读658次。上周对骨骼识别的GitHub进行仿真,初步有了进展,现在对其进行复盘,首先软件是基于python语言为基础的,第一步就是安装python,对于版本是有要求的,这里先展示一下pyskl的下载库的版本要求。这个你可以试一下先pip下载cpython,cython,pip下载pycocotools ,但是一般还是有问题,所以先下载这个pycocotools的包,这是包的下载。10.mmdet=2.23.0这个是问题出的最多的地方,先是下载mmdet的whl文件,然后也放在跟mmcv-full的那个地方上面。_pyskl 环境配置

adobe dreamweaver cs5序列号_dwcs5序列号-程序员宅基地

文章浏览阅读5.2k次。Adobe Dreamweaver CS5序列号如下:1192-1973-6217-2477-6088-1657(我用的是这个)1192-1013-2621-8434-6884-01751192-1482-6532-1529-0926-55701192-1384-9698-0251-8971-98021192-1678-5764-4289-1578-82661192-1337-9219..._dwcs5序列号

超详细Anaconda安装教程-程序员宅基地

文章浏览阅读10w+次,点赞488次,收藏2.2k次。超详细最新Anaconda安装教程_anaconda安装教程

C语言中的3种注释方法_c语言注释-程序员宅基地

文章浏览阅读1.5w次,点赞5次,收藏30次。在用C语言编程时,常用的注释方式有如下几种: (1)单行注释 // … (2)多行注释 /* … */ (3)条件编译注释 #if 0…#endif_c语言注释

推荐文章

热门文章

相关标签