新闻详情

新闻详情

首页 / 资讯中心 / 详情

C++ : 编译链接流程

发布时间:2026/9/2 17:11:22来源:尧图网络
C++ : 编译链接流程
C++ 编译链接流程专题详解从一行.cpp源代码到最终能双击运行的可执行文件,中间经历了预处理、编译、汇编、链接四个阶段。理解这条流水线,不仅能解释很多"报错到底出在哪一步"的问题,也能彻底讲清楚static、const、extern这些关键字在不同阶段各自扮演的角色,以及静态库/动态库的本质区别。目录整体流程总览第一阶段:预处理(Preprocessing)第二阶段:编译(Compilation)第三阶段:汇编(Assembly)第四阶段:链接(Linking)声明 vs 定义,以及 ODR关键字在各阶段的角色对照静态库 vs 动态库常见坑高频面试题一、整体流程总览main.cpp 可执行文件 │ ▲ │ 预处理(Preprocessing) │ ▼ │ main.i (展开了宏、头文件的纯C++代码) │ │ │ │ 编译(Compilation) │ 链接(Linking) ▼ │ main.s (汇编代码,文本格式的CPU指令) main.o + 其他.o文件 + 库文件 │ ▲ │ 汇编(Assembly) │ ▼ │ main.o (目标文件,二进制机器码 + 符号表 + 重定位信息) ─────────────────┘四个阶段分别由不同的工具完成(以GCC/Clang为例):阶段工具输入输出预处理预处理器(cpp).cpp.i编译编译器(cc1).i.s汇编汇编器(as).s.o链接链接器(ld)多个.o+ 库文件可执行文件注意:日常开发中我们常说"编译一个项目",其实是把这四个步骤打包在一起的统称,g++ main.cpp -o main这一条命令背后依次调用了这四个独立的工具。可以用g++ -save-temps main.cpp保留每个中间阶段的产物,直观看到每一步到底发生了什么。二、第一阶段:预处理(Preprocessing)这是一个纯文本替换阶段,不理解任何C++语法,只处理以#开头的预处理指令。主要工作1. 头文件展开(#include)#include"decoder.h"预处理器会把这一行替换成decoder.h文件的完整内容,如果decoder.h里又#include了其他头文件,会递归展开,最终把所有依赖的头文件内容全部"平铺"进当前这一个巨大的临时文件里。2. 宏替换(#define)#defineMAX_SIZE100intarr[MAX_SIZE];// 预处理后变成 int arr[100];#defineSQUARE(x)((x)*(x))inty=SQUARE(5);// 预处理后变成 int y = ((5) * (5));3. 条件编译(#ifdef/#ifnde
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

CesiumJS三维地球动态热力图实现:基于相机高度的LOD与性能优化 2026/9/2 17:59:31

CesiumJS三维地球动态热力图实现:基于相机高度的LOD与性能优化

简介:本资源是一套基于Cesium与Vue.js实现的动态热力图可视化方案,面向GIS开发工程师、Web三维可视化学习者及地理信息应用开发者,解决热力图随视角变化(尤其是相机高度)实时自适应渲染的技术难点。资源包共110个文件&…

阅读更多 →
STM32 HAL库下机智云GAgent串口与定时器资源迁移实战 2026/9/2 17:59:31

STM32 HAL库下机智云GAgent串口与定时器资源迁移实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
SpringBoot+Vue3美食点餐系统:从零部署到功能测试完整指南 2026/9/2 17:59:31

SpringBoot+Vue3美食点餐系统:从零部署到功能测试完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
LLM时代教育转型:从评估失效到AI增强的教学设计与实践 2026/9/2 17:59:31

LLM时代教育转型:从评估失效到AI增强的教学设计与实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
GeoServer war包部署实战:从安装包到Tomcat的完整迁移指南 2026/9/2 17:59:31

GeoServer war包部署实战:从安装包到Tomcat的完整迁移指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
wvp+ZLMediaKit一键部署脚本:国标视频接入从小时级到分钟级 2026/9/2 17:56:30

wvp+ZLMediaKit一键部署脚本:国标视频接入从小时级到分钟级

简介:这是一套面向安防监控开发与运维人员的GB28181国标接入快速部署包,将wvp-GB28181-pro视频平台与ZLMediaKit流媒体服务整合为可直接安装的脚本集合,很好地解决了从零编译、手动配置MySQL、Redis、JDK等依赖组件耗时且易出错的问题。资源共…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞