20240508 C加加复习(四)

一个C++程序从编写编译到运行的过程
- 自己先自己回忆一下这是一个大概的什么过程
预编译:进行宏定义基本替换
编译 : 进行词法分析语法分析
汇编:将命令翻译成机器码
链接:就是链接啊
果然忘得很彻底
基本过程
-
看嵌入式C语言自我修养自我总结
-
从开始和结果来看:从源程序到二进制机器指令的过程
-
过程:
1.预处理:处理文件中各种预处理命令。ci
- 头文件展开、宏展开、条件编译、删除注释、添加行号和文件名标识、保留#pragma命令
- ci,将源文件main.c变为main.i
- `g++ main.i -S -o main.s``
- ``-S` 选项告诉编译器生成汇编代码而不是将其编译成目标文件。具体地说,它告诉编译器在预处理和编译的基础上生成汇编代码,并将汇编代码保存在指定的输出文件中。
2.编译:**将预处理后的main.i编译成汇编文件main.s。**is
- 把预编译之后生成的xxx.i或xxx.ii文件,进行一系列词法分析、语法分析、语义分析及优化后,生成相应 的汇编代码文件。
- 词法分析语法分析语义分析优化,目标代码生成,目标代码优化
g++ main.i -S -o main.s
3.汇编:**将汇编代码转变成机器可以执行的指令(机器码文件)。**so
g++ main.s -s -o main.o
4.链接:将不同的源文件产生的目标文件进行链接,从而形成一个可以执行的程序。
-
编译链接可执行文件的时候,连接器从库中复制这些函数和数据并把它们和引用程序的其它模块组合起来创建最终的可执行文件。链接器主要完成以下两个任务:
符号解析:每个符号对应于一个函数、一个全局变量或者一个静态变量 重定位:链接器通过把每个符号定义与一个内存位置关联起来,然后修改所有对于这些符号的引用,使得它们指向这个内存位置
-
分为静态链接和动态链接
Comments
Comment plugin failed to load
Loading comment plugin