在 C++ 开发中,obj 文件 是 目标文件(Object File) 的简称,是源代码编译后、链接成最终可执行文件前的中间产物。
一、obj 文件的生成过程
- 编译器(如 MSVC、GCC)对单个
.cpp源文件进行编译,会完成预处理、编译、汇编 三步:- 预处理:处理
#include、#define等指令,生成纯代码; - 编译:将纯代码翻译成汇编语言;
- 汇编:将汇编语言翻译成机器码 ,并打包成
.obj目标文件。
- 预处理:处理
- 一个
.cpp文件编译后会生成一个对应的.obj文件(比如main.cpp→main.obj,utils.cpp→utils.obj)。
二、obj 文件的特点
- 包含机器码,但不可直接运行 :obj 文件里是 CPU 能识别的机器码,但缺少系统级的启动代码、库函数依赖,还没解决多个文件之间的符号引用(比如
main.cpp调用utils.cpp里的函数),因此无法直接双击运行。 - 与平台 / 编译器强相关:不同编译器(MSVC vs GCC)、不同架构(x86 vs x64)生成的 obj 文件格式不同,无法混用。
三、obj 文件的最终去向:链接成可执行文件
链接器(Linker)会把所有 obj 文件 + 系统库 / 第三方库文件 整合起来,解决符号引用、补充依赖代码,最终生成能直接运行的可执行文件(Windows 下是 .exe,Linux 下是 .out)。
简单说:obj 文件是 C++ 编译过程中的 "半成品",多个半成品经过链接器加工,才会变成成品可执行文件。