C语言编译流程

 

 

无论是高级程序设计语言还是专用程序设计语言,都不能被计算机系统直接识别,用这些语言所编写的程序代码称为源程序,源程序需要通过预先设计好的专用程序进行转换,转换为计算机系统可以识别的机器指令,然后才能交由计算机系统执行。

编辑是程序员通过编辑软件录入源代码的过程。
编译是文件录入后,使用编译程序对源文件进行编译,目标文件已经是二进制的机器代码了。
一方面有些程序使用频率高,一般程序员难以自行开发,因此编译系统通常将这些功能预先编译好,以程序库的形式提供给程序员使用。
另一方面,待开发的程序可能不只一个源文件组成,而是由多个源文件构成的,经过编译后,每个源文件生成一个不完整的目标文件,将这些目标文件拼在一起,才能构成整个目标文件。
链接过程就是对组成整个程序的各个目标文件,程序库进行封装,生成最终的目标程序的过程。

 

C语言编译流程:

预处理-->编译-->汇编-->链接 -->a.out

预处理是把宏定义的指令信息拷贝到源程序中,进行头文件替换,不检查语法错误。

可以通过gcc编译命令【gcc -E  源文件(.c) -o 生成文件(.i)】 生成.i文件查看。

编译通过gcc编译命令[gcc -S 预处理文件(.i文件)]命令编译,这时会检查语法错误。生成.s文件。

汇编把文本文件编译成机器的二进制文件。通过gcc命令【gcc -c .s文件】,生成.o的文件。

链接是把多个.o的文件,链接成一个可执行的动态文件。输出.out文件。

时间: 2024-08-03 21:33:00

C语言编译流程的相关文章

《编译与反编译技术》—第1章1.7节C语言程序的编译流程

本节书摘来自华章出版社<编译与反编译技术>一书中的第1章,第1.7节C语言程序的编译流程,作者庞建民,陶红伟,刘晓楠,岳峰,更多章节内容可以访问"华章计算机"公众号查看. 1.7 C语言程序的编译流程 本节以C语言程序的编译流程为例,介绍实际的C语言编译器是如何运作的.通常把整个代码的编译流程分为编译过程和链接过程. 1.编译过程 编译过程可分为编译预处理.编译与优化.汇编等阶段. (1)编译预处理 编译预处理即读取C源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处

EDKII Build Process:EDKII项目源码的配置、编译流程[三]

<EDKII Build Process:EDKII项目源码的配置.编译流程[3]>博文目录: 3. EDKII Build Process(EDKII项目源码的配置.编译流程)       ->3.1 The General Process Of EDKII Build(EDKII项目源码的配置.编译一般流程)             ->3.1.1 Tool chain:BaseTools             ->3.1.2 Setup build shell env

Android应用程序的编译流程及使用Ant编译项目的攻略_Android

Android 工程构建的持续集成,需要搭建一套编译和打包自动化流程,比如建立每日构建系统.自动生成发布文件等等.这些都需要我们对Android工程的编译和打包有一个比较深入的理解,例如知道它的每一步都做了什么,需要什么环境和工具,输入和输出是什么,等等. 首先,假定你的系统(Windows.Linux.Mac OS都行,本文默认使用Linux系统来举例子,但在 Windows中几乎没有什么差别)已经安装了JDK和Android SDK. 我们重点关心的是:     (1)这个过程的输入是什么?

Android应用程序的编译流程及使用Ant编译项目的攻略

Android 工程构建的持续集成,需要搭建一套编译和打包自动化流程,比如建立每日构建系统.自动生成发布文件等等.这些都需要我们对Android工程的编译和打包有一个比较深入的理解,例如知道它的每一步都做了什么,需要什么环境和工具,输入和输出是什么,等等. 首先,假定你的系统(Windows.Linux.Mac OS都行,本文默认使用Linux系统来举例子,但在 Windows中几乎没有什么差别)已经安装了JDK和Android SDK. 我们重点关心的是:     (1)这个过程的输入是什么?

c语言-C语言编译NBA数据分析系统怎么连接数据库?

问题描述 C语言编译NBA数据分析系统怎么连接数据库? 连接数据库是不是用C#好一点,哪位大神懂C的,我是小白,请教了 解决方案 c也有连接数据库的库,直接调用

c语言-关于C语言编译C51单片机程序的一点疑问

问题描述 关于C语言编译C51单片机程序的一点疑问 1.为什么两段不相干的代码会互相影响 在主程序里有一段点亮发光二极管的代码,和一段计数器计数并在数码管上显示的代码.同时工作时,二极管正常点亮,数码管几秒才点亮一回,而且十位显示是闪烁一下就不显示了2.数码管显示时,位选和段选顺序不能改变吗?按照书上的方法是先段选再位选,但是点亮的数码管是本来不应该点亮的,段选和位选顺序换了之后就能正常显示了 解决方案 问题1)你所谓的同时工作是指led亮的同时数码管也在显示,是这样的吗?单片机跑的程序都是单线

CRP多语言编译/测试插件使用之基础环境

引言 最近CRP上线了多言编译/测试插件,作为开发者,我想使用CRP对我的项目进行持续集成,那么如何顺利的完成编译/测试我的项目呢,CRP提供的编译/测试的环境是什么,支持的指令有哪些呢,本文将详细介绍多语言编译/测试插件的基础环境. 什么是CRP的插件 CRP的插件是工作流中的的节点的任务的具体实现方式,比如编译/测试任务是由多语言编译/测试插件具体实现的. 常用指令(可以在crp编译/测试任务输入框内直接输入) apt-get update && apg-get install -y

ART世界探险(20) - Android N上的编译流程

ART世界探险(20) - Android N上的编译流程 就在我们分析Android M版本的ART还只走出了一小段路的时候,Android N的新ART就问世了. Android N上的ART还是有不小的改进的.不过做为一个关注细节的系列文章,我们还是从Compile的过程说起. 流程概述 在安装的时候,默认情况下,Android N只做interpret-only的编译,如下命令行所示: /system/bin/dex2oat --zip-fd=7 --zip-location=base.

ART世界探险(19) - 优化编译器的编译流程

ART世界探险(19) - 优化编译器的编译流程 前面,我们对于快速编译器的知识有了一点了解,对于CompilerDriver,MIRGraph等都有了初步的印象. 下面,我们回头看一下优化编译器的编译过程.有了前面的基础,后面的学习过程会更顺利一些. 下面我们先看个地图,看看我们将遇到哪些新的对象: OptimizingCompiler::Compile 我们先来看看优化编译的入口点,Compile函数: CompiledMethod OptimizingCompiler::Compile(c