首页 > 其他分享 >cpp的编译过程

cpp的编译过程

时间:2023-12-10 21:45:50浏览次数:25  
标签:汇编 结尾 文件 生成 编译 cpp 过程 预处理

C++程序的编译过程通常分为四个主要步骤:

  1. 预处理(Preprocessing):这个阶段主要处理源代码文件中的以“#”开头的预编译指令4。例如,对宏进行展开,对include的文件进行展开,处理条件编译选项判断,清理注释等。预处理后生成的文件通常以.i.ii结尾2

  2. 编译(Compilation):编译阶段使用预处理的输出结果作为输入,生成平台相关的汇编代码 (assembly code)24。编译的工作是检查词法和语法规则2。编译后生成的文件通常以.s结尾2

  3. 汇编(Assemble):汇编阶段将上一步的汇编代码转换成二进制的机器码,称为object code。产生的文件叫做目标文件,是二进制格式,文件通常以.o.obj结尾2

  4. 链接(Linking):链接过程将多个目标文件以及所需的库文件 (.so等)链接成最终的可执行文件 (executable file)。这是生成可执行文件的最后一步2

 

 

标签:汇编,结尾,文件,生成,编译,cpp,过程,预处理
From: https://www.cnblogs.com/whcjob/p/17893276.html

相关文章

  • 【持续更新】Archlinux使用过程中的问题
    一、添加archlinuxcn源之后安装archlinuxcn-keyring失败错误信息:~❯sudopacman-Sarchlinuxcn-keyring10s21:11:21正在解析依赖关系...正在查找软件包冲突...软件包(1)archlinuxcn-keyring-20230923-1......
  • java-打包编译常用命令
    java-打包编译常用命令 1.maven预编译(打包检查异常) 在上到测试环境或者生产环境之前,先在本地打包检查异常: mvncleaninstall-Dmaven.test.skip=true-X  2.maven打包 一般用IDEA上的maven工具按钮: 如果打包失败则可以用下面的命令: mvncleaninsta......
  • 哈夫曼树构造过程的证明
    设我们已经构造出来了最优树\(T_n\),他的叶子节点分别是\(w_1≤w_2...≤w_n\)假设\(T_n\)的最长的一条路的倒数第二个节点(即这条路叶子节点的父亲)\(x\)只有一个儿子,那么我们删掉这个节点\(x\),让他的儿子代替他,答案会变得更优,矛盾,所以\(x\)一定有两个儿子。我们假设这两个儿子不全......
  • riscv gnu编译器
    官网https://github.com/riscv-collab/riscv-gnu-toolchain编译器基于RISC-V交叉编译器包括32bit和64bit两种类型,其中每种类型又包括裸机版本(newlib)和动态链接库版本(linuxglibc)newlib./configure--prefix=/opt/riscvmakeglibc#默认仅支持64位target./configure--......
  • 【Cpp 基础】泛型算法 stable_sort() 的应用
    最近在刷牛客的题。经常遇到排序问题,经常有一个附加的规则:相同的数值的,按照录入的顺序排序。可是C++的sort()的底层是快速排序,并不能保证相同数值的顺序不改变。所以最后我不得不自己写冒泡排序。(冒泡排序不改变相同数值的录入顺序)写了那么多的排序,但是其实C++里封装有排序函数......
  • 【C语言】编译和链接
    1、翻译环境和运行环境在ANSIC的任何⼀种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。第2种是执行环境,它⽤于实际执行代码。2、翻译环境那翻译环境是怎么将源代码转换为可执⾏的机器指令的呢?这里我们就得展开开讲解⼀下翻译环境所做......
  • centos7.9 编译安装redis 6.2.6
    参考地址:https://zhudo.net/server/linux/149.html 1.下载和安装下载redis需要其他版本去官网自行下载wget-chttps://download.redis.io/releases/redis-6.2.6.tar.gz//解压tar-zvxfredis-6.2.6.tar.gz//把安装包移动到安装目录,并且重命名为redismvredis-6.2.6......
  • centos7.9 编译安装cmake 3.23.0
     参考地址:https://www.zhudo.net/server/linux/125.html1、先检查并卸载老版本yumremovecmake2、准备安装好cmake所需的依赖yum-yinstallgccgcc-c++opensslopenssl-develtar3、下载源码官方地址:https://github.com/Kitware/CMake/releases/download/v3.23.0/......
  • 【编译原理】用C/C++编写一个LL(1)解析器
    任务描述本关任务:用C/C++编写一个LL(1)解析器相关知识为了完成本关任务,你需要掌握:LL文法C/C++编程语言基础C语言的基本结构知识LL(1)解析器在创建解析器之前,你应该创建一个下面文法的LL(1)分析表。C/C++本实训涉及函数、结构体,标准流输入输出,字符串等操作实验要求......
  • MySQL使用存储过程
     存储过程概念(简介):   存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化开发人员应用程序的很多工作,减少数据在数据库与应用服务器之间的传输,对提高效率是很有很好处的!存储过程的设计很简单,就是SQL语言层面的代码封装与重用! 特点: ......