C++ 编译和运行的过程中文件的扩展名

在 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)

总结

以下是每一步中文件扩展名的变化总结:

  1. 源代码文件 : .cpp(源文件),.h(头文件)
  2. 预处理 : .i(预处理文件,通常不显式生成)
  3. 编译 : .s(汇编文件,通常不显式生成)
  4. 汇编 : .o(目标文件,Unix/Linux),.obj(目标文件,Windows)
  5. 链接 :
    • 可执行文件 : 无扩展名(Unix/Linux),.exe(Windows)
    • 共享库 : .so(Unix/Linux),.dll(Windows)
相关推荐
cpp_learners8 分钟前
C++ 实现责任链模式(Chain of Responsibility):从一堆 if-else 到可插拔的处理管道
开发语言·c++·责任链模式
郝学胜_神的一滴17 分钟前
C++11 工程级应用 12:编译期类型魔法,干掉重复与臃肿的代码
c++·visual studio
David猪大卫2 小时前
【C++修炼】哈希表的实现
数据结构·c++·笔记·学习·算法·哈希算法·散列表
广州山泉婚姻2 小时前
列表初始化:C++11全新初始化体系
c++·人工智能
莫生灬灬2 小时前
灵码 LingBuilder:用中文写代码,确定性生成真实 C++ 工程(开源)
c++·开源·mfc
浅念-2 小时前
C++ Protobuf 入门实战:基于通讯录项目吃透proto3语法与序列化
linux·服务器·网络·c++·protobuf·proto·proto3
汉克老师4 小时前
CSP-J 初赛(以满分为目标):第三十九课《数学与逻辑②——阶乘、排列数与组合数:公式到底从哪里来?》
c++·csp-j·小学生·学c++编程
水饺编程4 小时前
第5章,[Win32 章节] :在平面直角坐标系中描点
c语言·c++·windows·visual studio
linx2954 小时前
单元九 · 零基础路线图-第 7–9 周·类与 RAII
c语言·开发语言·数据结构·c++·嵌入式硬件·算法
布莱克6054 小时前
C++ 七大排序算法详解:选择、冒泡、插入、计数、堆、快速与归并排序
数据结构·c++·算法·排序算法