首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【C++源码编译】

【C++源码编译】

作者头像
贺公子之数据科学与艺术
发布2025-08-29 17:54:31
发布2025-08-29 17:54:31
2140
举报

C++源码到二进制可执行文件的过程与C语言类似,包括四个过程:预编译、编译、汇编、链接

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1、预编译 C/C++编译过程中的第一个阶段,主要目的是对源代码进行处理和准备工作。下面是预编译的主要步骤:

  1. 去除宏定义:将所有的 #define 删除,并展开所有的宏定义,将宏替换为具体的值或表达式。
  2. 处理条件预编译指令:对条件预编译指令进行处理,如 #if、#ifdef、#ifndef 等。根据条件判断结果,决定是否编译对应的代码块。
  3. 处理 #include 预编译指令:将被包含的文件插入到 #include 指令的位置。
  4. 过滤注释:将源代码中的注释部分去除,包括单行注释(//)和多行注释(/* … */)。
  5. 添加行号和文件名标识:为每一行添加行号和文件名标识,用于编译过程中的错误提示和调试。

预编译阶段主要包括宏展开、条件编译、头文件包含、注释过滤和标识添加等步骤,为后续的编译过程做好准备。 2、编译 1)词法分析+:将源代码的字符序列分割成一系列的记号,I 2)语法分析+:对记号进行语法分析,产生语法树+。 3)语义分析:判断表达式是否有意义。 4)代码优化 (5)目标代码生成+:生成汇编代码+ (6)目标代码优化 3、汇编 将汇编代码转变成机器可以执行的指令 4、链接 将不同的源文件产生的目标文件进行链接形成一个可以执行的程序。 (1) 静态链接:在链接的时候就已把要调用的函数链接到生成的可执行文件中。 把静态库删除也不会影响可执行程序执行。生成的静态链接库Windows下以 .lib 为后缀,Linux 下以 .a 为后缀。 (2) 动态链接:在链接的时候没有把调用的函数代码链接进去,而是在执行的过程中去找要链接的函数 生成的可执行文件中没有函数代码,只包含函数的重定位信息。 当删除动态库时,可执行程序就不能运行。生成的动态链接库Windows下以 .dll 为后缀,Linux下以 .so 为后缀。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档