导航:首页 > 源码编译 > add编译原理

add编译原理

发布时间:2025-02-16 00:30:20

① “基础知识”gcc/g++编译过程及gcc/g++与cmake对应关系

2022年,直接使用gcc/g++编译项目的可能性已经不多见,学习c/c++的程序员常选择cmake,但对gcc/g++编译过程的了解对高效掌握cmake至关重要。本文将逐步揭示gcc/g++的编译流程及其与cmake的关系。


首先,gcc/g++编译过程分为四个步骤:



  1. 预处理:处理#include和宏定义,g++使用-E选项生成预处理后的.i文件。

  2. 编译:将预处理文件转化为汇编代码,g++用-S命令生成.s文件。

  3. 汇编:将汇编语言转换成机器码,g++用-c命令生成.o目标文件。

  4. 链接:将目标文件与其他库合并为可执行文件,g++在最终步骤完成。


接着,了解gcc/g++的一些常用参数,如-I用于自定义头文件搜索路径,以及处理静态库和动态库的链接。


静态库和动态库的区别在于,静态库在编译时被直接嵌入,而动态库在运行时动态加载。使用g++时,需要-I和-l/L参数进行相应操作。


在cmake中,项目结构有所不同。CMakeLists.txt文件用于指导编译,如设置头文件搜索目录、生成可执行文件和链接库。静态库和动态库的创建与链接在cmake中通过add_library和target_link_libraries指令实现。


总的来说,了解gcc/g++的编译过程有助于更好地掌握cmake,即使使用cmake,对底层编译原理的理解仍能提高效率。从基础的helloworld项目开始,一步步实践编译操作,对编译流程的掌握将使cmake学习更加得心应手。

② 编译原理简单吗

编译原理主要是讲了编译器的实现。
那什么是编译器呢?
编译器就是将 源程序→编译器 →目标机器代码的程序
本文将用一段最简单的代码进行说明

1 + 2 + 3

第一步. 词法分析
当代码从文件中被读入到编辑器时,将会进行词法分析
示例中的代码最终会转换为(下面为伪代码)

1 ADD 2 ADD 3

第二步. 语法分析
这一步编译器将会把词法分析的结果转换成AST(abstract syntax tree, 抽象语法树)
所有的操作数将会作为子节点,所有的操作符将会作为父节点。(不知道的同学可以看一下树的生成)

1 + 2 + 3 对应的树
3. 生成目标代码
对上面的树进行后序遍历,将会得到下面的伪代码

((1 2 +) 3 +)

生成的汇编伪代码为

START:

MOV VALUE, 0//初始化结果为0

ADD VALUE, 1

ADD VALUE, 2//(1 2 +)的汇编伪代码

ADD VALUE, 3

RET VALUE

END

最终汇编代码会被编译成机器代码,在计算机上执行。
下面为一般情况下的编译流程
1. 词法分析(生成代码对应的token序列,使用正则表达式)
2. 语法分析(生成AST)
3. 语义分析(对代码的语法进行检查)
4. 代码生成(生成可执行的代码)

阅读全文

与add编译原理相关的资料

热点内容
java赋值null 浏览:54
数控程序员考试 浏览:260
单片机0x 浏览:451
dhsp服务器是什么 浏览:690
网络监测命令 浏览:206
redis队列java 浏览:221
php商城项目思路 浏览:461
反编译程序集能修改吗 浏览:1002
小盒课堂app哪个好用 浏览:535
pdf剪裁工具 浏览:43
多人协同服务器地址 浏览:665
wifi恢复出厂设置怎么加密 浏览:337
手机date文件夹无法访问 浏览:90
19款速腾安卓主机如何与手机互联 浏览:776
网易我的世界电脑版服务器地址 浏览:78
v语言编译器解析 浏览:181
linux收不到组播 浏览:13
程序员那么可爱电视剧在线看 浏览:624
r语言图例函数命令 浏览:445
服务器怎么使用端口搭建多个网站 浏览:122