obj 文件

在 C++ 开发中,obj 文件 是 目标文件(Object File) 的简称,是源代码编译后、链接成最终可执行文件前的中间产物。

一、obj 文件的生成过程

  1. 编译器(如 MSVC、GCC)对单个 .cpp 源文件进行编译,会完成预处理、编译、汇编 三步:
    • 预处理:处理 #include、#define 等指令,生成纯代码;
    • 编译:将纯代码翻译成汇编语言;
    • 汇编:将汇编语言翻译成机器码 ,并打包成 .obj 目标文件。
  2. 一个 .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++ 编译过程中的 "半成品",多个半成品经过链接器加工,才会变成成品可执行文件。

相关推荐
暖焰核心2 小时前
二叉搜索树——从插入查到key-value改写
c++
草莓熊Lotso5 小时前
【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战
网络·数据库·c++·redis·微服务·etcd
把我格子衫拿来12 小时前
VTK 9.5 与 Qt 6 联合开发:从嵌入三维窗口到可维护的桌面架构
c++·python·qt·vtk·三维可视化
无忧.芙桃12 小时前
C++语言原理与实践(十六):多态机制讲解
开发语言·c++·多态
wuminyu14 小时前
JMM学习总结:深入理解happens-before关系
java·linux·c语言·jvm·c++
xxwl58514 小时前
区域赛分类题解
c++·笔记·学习·算法
青少儿编程课堂15 小时前
蓝桥杯+全国青少年信息素养大赛+电子学会PythonC/C++考级:最长公共子序列LCS解析
c++·python·算法·bfs·信息学竞赛
代钦塔拉16 小时前
【C++/Qt 进阶】设计模式系列(2):工厂模式——从游戏角色到披萨店
c++·算法·设计模式
把我格子衫拿来18 小时前
VTK 与 Qt 的 CMake 工程怎么组织?模块、工具链与二进制兼容排错
c++·qt·vtk·cmake·工程实践
灯澜忆梦18 小时前
【面向对象编程c++】| 指针与自定义数据类型
开发语言·c++·算法