c++语言的编译预处理,关于C/C++程序预处理、编译、连接到执行的过程

1

源文件hello.c(文本)--à预处理器----àhello.i(文本)

预处理器:将#include

包含的文件内容插入该命令处,检查全文处理#define宏定义,处理条件编译命令 #if #endif 将不需要的code屏蔽掉,处理完毕后生成修改后的源代码hello.i.

2

hello.i(文本)----à编译器------àhello.s(汇编程序 文本)

编译器:词法分析语法分析,生成一条条的汇编语句如mov

ax,bx,相当于是优化后的汇编语言的源文件。

3

hello.s(汇编文本)------à汇编器----àhello.o(目标文件 二进制)

汇编器:将汇编源文件翻译成对应的机器指令,而且还写入一些东西与机器指令打包成可重新定位目标程序格式的文件hello.o

4 hello.o(目标文件

二进制)----à连接器----àhello.exe(可执行目标文件 二进制)

连接器:比如说hello.o里调用了标准库里函数eg prinf

,连接器的工作就是找到prinf所在的目标文件xx.o或是xx.lib然后将该程序插入到我们的hello.o中,具体来说,其细节是什么,如何找到xx.o呢?是不是只并入用到的函数呢?

5关于hello.exe执行:在OS下运行程序时候,比如说我们double

click一个xx.exe的图标,先是OS调用它一个叫做Loader加载器的函数,它读取分析可执行文件中的相关信息后,将其代码和数据拷贝到Memory中,然后进行一些操作后(?)将控制转移到这个程序。

6关于目标文件Object File

类别:可执行的目标文件

可重定位的目标文件

共享目标文件(特殊的可重定位目标文件,load time或run time 时动态加载和link)

以下分析Unix ELF格式(Executable and

Linkable Format)可执行和可连接格式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值