.o 文件(Object File,目标文件)是在程序编译过程中由编译器(如 GCC)将源代码(例如 .c 或 .cpp 文件)编译后生成的中间文件。
一、.o 文件的作用
在 C/C++ 等语言的构建流程中,编译通常分为两个阶段:
- 编译阶段:将每个源文件(如
main.c)单独编译成对应的.o文件(如main.o)。 - 链接阶段:链接器(如
ld)将多个.o文件以及库文件合并,最终生成可执行文件(如a.out或program.exe)。
二、.o 文件包含什么?
- 机器码(但尚未分配最终地址)
- 符号表(用于链接时解析函数和变量引用)
- 重定位信息
- 调试信息(如果编译时加了
-g参数)
三、如何生成 .o 文件?
使用 GCC 示例:
gcc -c main.c -o main.o
其中 -c 表示只编译不链接,生成 main.o。
四、能否直接运行 .o 文件?
不能。.o 文件不是可执行文件,缺少入口点和完整的地址空间布局,必须经过链接才能运行。
五、相关扩展
在 Windows 平台,类似的概念是 .obj 文件;在 macOS 和 Linux 中通常使用 .o 格式,遵循 ELF(Executable and Linkable Format)标准。