概述
C++的编译过程主要分为四个阶段:预处理、编译、汇编、链接。
预处理阶段
处理源代码中的预处理指令,例如:#include 、#ifdef 、#include 等,生成预处理后的文件(通常有.i或者 .ii 扩展名)
命令:g++ -E source.cpp > source.i
编译阶段
将预处理后的文件转换成汇编语言文件,生成的文件扩展名通常有.s 扩展名。
命令:g++ -S source.i > source.s
汇编阶段
将汇编语言文件转换成二进制文件,生成的目标文件通常有 .o 扩展名。
命令:g++ -c source.s > source.o
链接阶段
将多个目标文件所需的库文件,组合生成最终的可执行文件。
命令:g++ source.o -o target
链接分为静态链接(.a 或 .lib)和动态链接(.dll 或 .so)。
静态链接会将所有的依赖库,最终打包到可执行文件中,优点是不用考虑依赖,程序的执行相对更高效。缺点是可执行文件相对来说更大,升级依赖的时候,需要重新编译所有的组件,重新生成可执行文件。
动态链接是指在最终链接的时候,不会将依赖库打包到可执行文件,在运行的时候才加载到内存中。优点是,可执行文件相对较小,升级依赖的时候,不用重新编译可执行文件。
留言