C语言hello work的编译过程分解
C语言hello work的编译过程分解
- hello world编译全过程
- 预编译
- 编译
- 汇编
- 链接
hello world编译全过程
下面用一个最简单的程序去熟悉程序(.c或.cpp文件)在编译成可执行文件(a.out)需要经历那些过程。
//file name "hello.c"
#include<stdio.h>
int main()
{printf("hello world\n");return 0
}
$ gcc hello.c
$./a.out
在Linux下,使用GCC来编译程序时,只需要一条命令(gcc)就可以得到我们想要的可执行文件(a.out)。
其实,展开来看,这个过程可以分为4个步骤,分别是预处理、编译、汇编和链接。
预编译
预编译过程主要处理代码中以"#“开始的预编译指令。例如” #include “、” #define “、” #ifdef “、” endif "等。
其实就是将所有的宏定义展开。例如#include<stdio.h>就是将stdio.h文本内容复制到hello.c中展开。
预编译后的文件扩展名为" .i "。使用工具是预编译器cpp。
编译
编译过程就是把预处理完的文件进行一系列的词法分析、语法分析、语义分析以及优化后生产相应的汇编代码文件。简单理解就是将C/C++语言“翻译”成汇编。
编译后的文件扩展名为" .s "。使用工具是gcc,不过gcc命令只是很多后台程序的包装,该步骤应该使用的是编译程序ccl。
汇编
汇编过程就是将汇编代码转变成机器可以执行的机器指令,因为CPU只能识别机器指令,这些可执行的指令的集合就是目标文件。以上过程的C语言和汇编语言都是一种高级语言,最后通过层层“翻译”变成机器指令CPU才能识别并执行。
汇编后的文件扩展名为" .o "。使用工具是汇编器as。
链接
链接就是将各个源代码(.c)模块单独编译成目标文件(.o)组装起来,使各个模块之间相互引用的部分正常工作。链接可以分为静态链接和动态链接。
链接后的文件就是可执行文件(a.out)。使用工具是链接器ld。
参考文件
[1] 俞甲子,石凡,潘爱民.程序员的自我修养——链接、装载与库[M].北京:电子工业出版社,2009.4
C语言hello work的编译过程分解相关推荐
- -i 可以编译添加多个_C语言的编译过程
大家对C语言的编译过程可能有个大致的理解,但是,详细到每一步具体都干了啥,可能有的人不是很清楚啦,也包括我,要不然,就不会做笔记了,哈哈... 0.主要步骤 ① 步骤 编写源程序(.c) → 预处理 ...
- gcc编译c文件_Linux下C语言程序的编译过程
Linux下C语言程序的编译过程 使用gcc编译程序时,编译工程分为4个阶段: (1)预处理:(Pre-Processing) (2)编译:(Compiling) (3)汇编:(Assembling) ...
- 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- C语言编译过程总结详解
C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接.编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程.链接是把目标文件.操作 ...
- GCC 使用-C语言编译过程
任何一种高级语言,要想在机器上执行,必须翻译为机器能读懂的机器语言.编译器就相当于翻译官,将高级语言翻译为机器语言. GCC 最初只用了编译 C 语言程序,全称是 GNU C Compiler.后来扩 ...
- c语言的详细编译过程
gcc编译c语言的整个编译过程可分为预编译->编译->汇编->链接 我们先编辑一个name.c文件 1 # include<stdio.h> 2 int main(int ...
- Go 语言编译过程概述
Golang 是一门需要编译才能运行的编程语言,也就说代码在运行之前需要通过编译器生成二进制机器码,随后二进制文件才能在目标机器上运行,如果我们想要了解 Go 语言的实现原理,理解它的编译过程就是一个 ...
- C语言学习笔记---001C语言的介绍,编译过程原理,工具等
C语言学习笔记---001C语言的介绍,编译过程原理,工具等 创梦技术交流平台:资源下载,技术交流,网络赚钱: 交流qq群:1群:248318056 2群:251572072 技术交流平台:cre.i ...
- c语言的编译过程,从文本到可执行文件
从文本文件到可执行文件 以hello world举例. #include<stdio.h> int main(){printf("hello,world!\n");re ...
最新文章
- linux2.0版本发布时间,Ubuntu 20.04 LTS发布时间表公布 4月23日放出最终稳定版
- 中文速读微生物组(宏基因组)前沿文献——这个可以有
- Jvm 系列(七):Jvm 调优-工具篇
- GitHub高效搜索
- matlab能修图吗,相机上这个“功能”,不打开会影响修图效果,别等拍完照片才知道...
- 【响应式Web前端设计】Bootstrap入门Demo(导航栏)
- Python 技术篇-1行代码实现语音识别,speech库快速实现简单的语音对话
- SwingC API 演示DEMO,不断更新
- Ajax-基本概述(one)
- python输入一个字母_python – Tkinter输入的第一个字母
- 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)
- Python 分布式文件系统 Mongodb GridFS
- 递增子序列 Increasing Subsequences
- 中职计算机英语课件ppt,语文版中职英语(基础模块 上册)Unit 7《Computers》ppt课件1.ppt...
- Eclipse使用常见设置
- paip. VS2010版本控制tfs使用总结
- SpringApplication#run⽅法第5步,打印banner(四)
- 虚拟机体验NAS私人云全揭秘:深度揭秘虚拟机安装群晖DSM6.2/6.2.1/6.2.2/6.2.3系统洗白全过程(附赠洗白码)
- Pandas一键爬取解析代理IP与代理IP池的维护
- python google earth_如何用python编程控制GoogleEarth
热门文章
- solaris linux nfs,solaris 10 nfs服务配置
- x86系统MySQL_deepin20.1系统安装MySQL8.0.23(最美国产Liunx系统,最新,最详细的MySQL8安装教程)...
- android10新功能,Android10(Api 29)新特性
- 自注意力机制_与SENet互补提升,华为诺亚提出自注意力新机制:Weight ExcitationECCV2020...
- 【windows】windows允许 ICMP协议(允许ping)
- 【debug】moduleNotFoundError:No module named 'exceptions'
- Oracle 实验5 视图与索引
- 电脑上的linux是什么文件夹,linux删除文件夹,详细教您电脑的linux怎么样删除文件夹...
- 小程序分享到朋友圈功能_小程序开发日记 分享到朋友圈
- matlab出如何从fig中获取数据,如何从MATLAB的fig文件中提取原始数据?