全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

c++编译过程分为几步 c++预处理到链接全解析【详解】

C++编译过程分为预处理、编译、汇编、链接四个阶段:预处理执行文本替换与文件拼接;编译进行语法语义分析并生成汇编代码;汇编将汇编代码转为目标文件;链接解析符号、重定位并合并库,生成可执行文件。

C++ 编译过程不是一步到位的,而是分四个明确阶段:预处理、编译、汇编、链接。每个阶段各司其职,缺一不可,理解它们能帮你快速定位报错位置(比如是宏写错了?还是函数没定义?),也能更好理解头文件、静态库、符号冲突等常见问题。

预处理(Preprocessing)

这一步干的是“文本替换”和“文件拼接”,不涉及语法检查,纯机械操作。编译器调用预处理器(如 cpp)处理以 # 开头的指令:

  • #include:把头文件内容原样插入到对应位置(递归展开),形成一个巨大的“翻译单元”(translation unit)
  • #define:做宏替换(包括带参宏),注意只是字符串替换,不检查类型或作用域
  • #ifdef / #ifndef / #endif:根据宏是否已定义,决定保留或丢弃某段代码(用于条件编译,如跨平台适配)
  • #pragma:向编译器传递特定指令(如对齐、告警控制),行为依赖编译器

你可以用 g++ -E main.cpp 查看预处理后的完整代码(通常很长,但能看清头文件展开结果和宏展开效果)。

编译(Compilation)

预处理输出的“.i”文件(纯C++文本)被送入编译器核心(如 cc1plus)。这步真正做语义分析和代码生成:

  • 词法分析 → 语法分析 → 语义分析(检查变量声明、类型匹配、模板推导、constexpr 计算等)
  • 生成与机器无关的中间表示(如 GCC 的 GIMPLE),再优化(常量折叠、内联、死代码消除等)
  • 最终输出汇编语言代码(“.s” 文件),例如 movcalljmp 等指令

出错信息如 “‘x’ was not declared in this scope” 或 “no matching function for call” 都发生在这步。用 g++ -S main.cpp 可直接得到汇编文件。

汇编(Assembly)

把人类可读的汇编代码(“.s”)翻译成机器能执行的二进制目标码(“.o” 或 “.obj”),即目标文件(object file):

  • 包含机器指令、已解析的符号表(如函数名、全局变量名)、重定位信息(告诉链接器:“这个 call 指令的目标地址还没确定,后面填”)
  • 不解决函数跨文件调用——比如 main.o 里调用了 printf,但 printf 实际在哪还不知道,只记下 “需要一个叫 printf 的符号”
  • 目标文件还不是可执行文件,不能直接运行(缺少入口、未分配最终地址、未解析外部引用)

g++ -c main.cpp 就停在这步,生成 main.o;可用 objdump -d main.o 查看反汇编指令。

链接(Linking)

把一个或多个目标文件(.o)和库(.a/.so)合并,解决所有符号引用,产出可执行文件或共享库:

  • 符号解析:把 “调用 printf” 和 libc.so 中真正的 printf 实现匹配上;若找不到,报 “undefined reference to ‘printf’”
  • 重定位:给每个函数、变量分配最终内存地址(如 .text 段从 0x400500 开始),并修正所有跳转/取址指令中的地址
  • 库处理:静态链接(.a)把代码直接拷进可执行文件;动态链接(.so)只存引用,运行时由 loader 加载
  • 链接还会加入启动代码(_start)、C 运行时初始化(__libc_start_main)、全局构造函数调用等

g++ main.o util.o -lm -o program 就完成链接;若漏了 -lm,sqrt 就会链接失败。

整个流程串起来就是:main.cpp → main.i → main.s → main.o → program。每步出错都有典型特征:预处理错在宏或头文件路径,编译错在语法/语义,汇编错极少见(除非手写汇编有误),链接错集中在符号缺失或重复定义。掌握各阶段输入输出,调试效率能翻倍。


# 处理器  # ai  # c++  # 常见问题  # 作用域  # red  # Object  # 常量  # define  # for  # 构造函数  # include  # printf  # 全局变量  # 字符串  # 预处理器  # 递归  # undefined  # function  # this  # 可执行文件  # 这步  # 头文件  # 的是  # 错在  # 就会  # 都有  # 还没  # 多个 


相关文章: 免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  网站制作免费,什么网站能看正片电影?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  制作网站的模板软件,网站怎么建设?  如何用低价快速搭建高质量网站?  如何在阿里云虚拟主机上快速搭建个人网站?  网站制作新手教程,新手建设一个网站需要注意些什么?  网站制作壁纸教程视频,电脑壁纸网站?  如何获取PHP WAP自助建站系统源码?  实例解析angularjs的filter过滤器  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  如何用wdcp快速搭建高效网站?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  建站之星CMS五站合一模板配置与SEO优化指南  建站之星如何实现五合一智能建站与营销推广?  建站之星如何保障用户数据免受黑客入侵?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  如何选购建站域名与空间?自助平台全解析  简单实现Android验证码  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  官网网站制作腾讯审核要多久,联想路由器newifi官网  建站之星如何实现PC+手机+微信网站五合一建站?  Java解压缩zip - 解压缩多个文件或文件夹实例  Swift中循环语句中的转移语句 break 和 continue  建站之星客服服务时间及联系方式如何?  定制建站哪家更专业可靠?推荐榜单揭晓  建站之星如何取消后台验证码生成?  制作网站外包平台,自动化接单网站有哪些?  孙琪峥织梦建站教程如何优化数据库安全?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  如何通过虚拟机搭建网站?详细步骤解析  建站之星云端配置指南:模板选择与SEO优化一键生成  如何登录建站主机?访问步骤全解析  如何在宝塔面板中创建新站点?  建站之星安装后界面空白如何解决?  南京网站制作费用,南京远驱官方网站?  如何制作网站标识牌,动态网站如何制作(教程)?  如何在万网ECS上快速搭建专属网站?  建站之星2.7模板:企业网站建设与h5定制设计专题  建站主机核心功能解析:服务器选择与网站搭建流程指南 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。