C++源文件到可运行文件的过程

一.四个步骤

对于C/C++编写的程序,从源码到可运行文件,一般经过以下四个步骤:

1).预处理,产生.ii文件

2).编译,产生汇编文件(.s文件)

3).汇编,产生目标文件(.o或.obj文件)

4).链接,产生可运行文件(.out或.exe文件)

以hello.c为例。这个过程能够用以下的图来表示

二.预处理

预处理主要包括以下的内容:

a.对全部的“#define”进行宏展开。

b.处理全部的条件编译指令,比方“#if”,“#ifdef”。“#elif”,“#else”,“#endif”

c.处理“#include”指令,这个过程是递归的,也就是说被包括的文件可能还包括其它文件

d.删除全部的凝视“//”和“/**/”

e.加入行号和文件标识

f.保留全部的“#pragma”编译器指令

经过预处理后的.ii文件不包括不论什么宏定义,由于全部的宏已经被展开。而且包括的文件也已经被插入到.ii文件里。

三.编译

编译的过程就是将预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成对应的汇编代码文件(.s文件)

四.汇编

汇编器是将汇编代码转变成机器能够运行的代码,每个汇编语句差点儿都相应一条机器指令。终于产生目标文件(.o或.obj文件)。

五.链接

链接的过程主要包含了地址和空间分配(Address and Storage Allocation)、符号决议(Symbol Resolution)和重定位(Relocation)

版权全部。欢迎转载,转载请注明出处。谢谢

时间: 2024-10-24 15:43:16

C++源文件到可运行文件的过程的相关文章

嵌入式之:Linux下文件编译过程

本文主要三个部分:1.GNU GCC简介 2.C/C++交叉编译器arm-elf-gcc 3.make文件,用于工程管理 部分一:GNU GCC简介: 该编译器基本功能: (1)输出预处理后的文件(展开头文件和替换宏) (2)输出.s的汇编文件 (3)输出二进制目标文件 (4)输出.o可执行文件 (5)转换文件格式 (6)生成静态库文件 工具: arm-elf-gcc:她是前端程序通过调用其他程序实现把code编译为可执行文件 arm-elf-as:将汇编转为ELF(executable and

关于源程序到可运行程序的过程

源程序,是指未经编译的,依照一定的程序设计语言规范书写的,人类可读的文本文件,我们通常理解为源程序就是我们所写好的代码. 可运行程序.我们常说的.exe程序,能够运行程序.完毕计算机功能.在C语言中,.c文件就是所谓的源文件,接下来,我们剖析一下,源程序到可运行程序的过程. 在这个过程中.会发生例如以下的变化: .c文件生成.obj文件的过程,我们称为编译..obj文件生成到.exe文件的过程,我们称为链接. 在这里首先生成的.obj文件就是一个是程序编译生成的二进制文件.再后来,当.exe文件

Lab_1:练习一——理解通过make生成执行文件的过程

参考网站: https://www.cnblogs.com/chaunceyctx/p/7188779.html https://cloud.tencent.com/developer/article/1415004 https://www.runoob.com/linux/linux-comm-dd.html 练习1:理解通过make生成执行文件的过程.(要求在报告中写出对下述问题的回答) 列出本实验各练习中对应的OS原理的知识点,并说明本实验中的实现部分如何对应和体现了原理中的基本概念和关键

“允许源文件与模块生成文件不同” 解决方法 ,亲测最有效的

今天写代码的时候有一处访问数据库的操作,sql语句报了错,因为少加了一个[,] 调试的时候中断在这个地方,然后发现了问题,就顺手加了上去,再运行的时候发现运行的版本还是那个少了[,]的版本 然后就有了此文 网上查找解决方案大致有三种,我尝试了两种,最后使用了自己的办法解决 网上的解决方案链接在此[http://blog.csdn.net/woaizhoulichao1/article/details/6313173] 最后删除了源文件中bin目录下的文件,整个项目就出了问题,就想到是不是生成不正

Java前端编译:Java源代码编译成Class文件的过程

Java前端编译:Java源代码编译成Class文件的过程 在上篇文章<Java三种编译方式:前端编译 JIT编译 AOT编译>中了解到了它们各有什么优点和缺点,以及前端编译+JIT编译方式的运作过程. 下面我们详细了解Java前端编译:Java源代码编译成Class文件的过程:我们从官方JDK提供的前端编译器javac入手,用javac编译一些测试程序,调试跟踪javac源码,看看javac整个编译过程是如何实现的. 1.javac编译器 1-1.javac源码与调试 javac编译器是官方

iOS开发-方法调用在运行时的过程

方法调用在运行时的过程 如果用实例对象调用实例方法,会到实例的isa指针指向的对象(也就是类对象)操作. 如果调用的是类方法,就会到类对象的isa指针指向的对象(也就是元类对象)中操作. 首先,在相应操作的对象中的缓存方法列表中找调用的方法,如果找到,转向相应实现并执行. 如果没找到,在相应操作的对象中的方法列表中找调用的方法,如果找到,转向相应实现执行 如果没找到,去父类指针所指向的对象中执行1,2. 以此类推,如果一直到根类还没找到,转向拦截调用. 如果没有重写拦截调用的方法,程序报错. 以

f2fs源码分析之文件读写过程

本篇包括三个部分:1)f2fs 文件表示方法: 2)NAT详细介绍:3)f2fs文件读写过程:4) 下面详细阐述f2fs读写的过程. 管理数据位置关键的数据结构是node,node包括三种:inode.直接node.间接node.其中inode记录了文件的基本信息,包括访问权限.文件大小.修改时间等,也有索引的功能:直接node和间接node单纯负责索引.F2fs的inode中有923个直接数据块索引,2个一级索引,2个二级索引,1个三级索引,文件的逻辑表示如下图: inode中有923个索引项

详解Javac将java文件编译为class文件的过程

Java编译器总的来说分为前端编译器,JIT(just in time compiler)编译器,AOT(Ahead Of Time Compiler)编译器三种. 前端编译器: 将Java文件编译为class文件的编译器,目前主要有以下两个,Sun提供的Javac 和Eclipse JDT中的增量式编译器(ECJ) JIT编译器: 虚拟机后端运行期编译器,把字节码转换为机器码的过程.HotSpot Vm中提供的C1, C2编译器 AOT编译器:直接把Java文件转换为本地机器码的过程. GNU

U盘文件恢复过程中的注意事项

如今U盘已经成为大家最常使用的移动存储设备,U盘的优越性就不细说了,因为这些正是我们购买的理由.使用U盘的过程中,总会遇见些问题,尤其是中病毒.格式化.操作失误等等,这些问题一般导致的结果就是U盘内存储的数据丢失.随着U盘容量的不断加大,数据丢失带来的麻烦也在随着增加.因此,无敌数据恢复软件就成了电脑上必备的软件了. 无敌数据恢复软件不仅功能强大,操作也非常简单,它拥有人性化的提示向导,即使是第一次接触的人也可以很快上手,只是很多人只是一味的寻求最终的扫描结果,而忽略了一些基本的数据恢复原理和常