在 C++ 编译和运行的过程中,文件的扩展名会随着每个步骤的进展而发生变化。以下是一个典型的 C++ 编译和运行过程,以及每一步中文件扩展名的变化:
1. 源代码文件(.cpp
或 .h
)
- 源代码文件 : C++ 源代码文件通常以
.cpp
作为扩展名,头文件以.h
作为扩展名。- 示例:
main.cpp
,mylib.cpp
,mylib.h
- 示例:
2. 预处理(生成 .i
文件)
- 预处理 : 预处理器处理源代码中的宏定义、头文件包含和条件编译指令,生成预处理后的文件。预处理后的文件通常以
.i
作为扩展名,但这个文件通常不会显式生成,除非你特别指定。- 命令:
g++ -E main.cpp -o main.i
- 示例:
main.i
- 命令:
3. 编译(生成 .s
文件)
- 编译 : 编译器将预处理后的源代码转换为汇编代码,生成汇编文件。汇编文件通常以
.s
作为扩展名,但这个文件通常不会显式生成,除非你特别指定。- 命令:
g++ -S main.i -o main.s
- 示例:
main.s
- 命令:
4. 汇编(生成 .o
文件)
- 汇编 : 汇编器将汇编代码转换为机器代码,生成目标文件。目标文件通常以
.o
作为扩展名(在 Windows 上通常为.obj
)。- 命令:
g++ -c main.s -o main.o
- 示例:
main.o
- 命令:
5. 链接(生成可执行文件或共享库)
- 链接 : 链接器将一个或多个目标文件和库文件链接在一起,生成可执行文件或共享库。可执行文件在 Unix/Linux 系统上通常没有扩展名,在 Windows 上通常以
.exe
作为扩展名。共享库在 Unix/Linux 系统上通常以.so
作为扩展名,在 Windows 上通常以.dll
作为扩展名。- 生成可执行文件 :
- 命令:
g++ main.o -o main
- 示例:
main
(Unix/Linux)或main.exe
(Windows)
- 命令:
- 生成共享库 :
- 命令:
g++ -shared -o libmylib.so mylib.o
- 示例:
libmylib.so
(Unix/Linux)或mylib.dll
(Windows)
- 命令:
- 生成可执行文件 :
6. 运行可执行文件
- 运行 : 最终生成的可执行文件可以直接运行。
- 命令:
./main
(Unix/Linux)或main.exe
(Windows)
- 命令:
总结
以下是每一步中文件扩展名的变化总结:
- 源代码文件 :
.cpp
(源文件),.h
(头文件) - 预处理 :
.i
(预处理文件,通常不显式生成) - 编译 :
.s
(汇编文件,通常不显式生成) - 汇编 :
.o
(目标文件,Unix/Linux),.obj
(目标文件,Windows) - 链接 :
- 可执行文件 : 无扩展名(Unix/Linux),
.exe
(Windows) - 共享库 :
.so
(Unix/Linux),.dll
(Windows)
- 可执行文件 : 无扩展名(Unix/Linux),