在Linux系统下进行C语言开发时,我们经常会接触到各类后缀不同的文件,其中和linux c相关的文件并非只有一种类型,不同后缀对应着程序开发不同阶段的产物,各自有着明确的作用。

常见的linux c相关文件类型
1. C语言源代码文件
最常见的linux c文件是后缀为.c的源代码文件,这类文件存储的是开发者编写的C语言源码,是程序开发的基础。例如我们可以编写一个简单的输出程序:
#include <stdio.h>
int main() {
printf("Hello Linux Cn");
return 0;
}
这类文件可以直接用文本编辑器打开,查看和修改其中的代码逻辑。
2. 头文件
后缀为.h的文件是C语言头文件,通常用来存放函数声明、宏定义、结构体定义等内容,供.c文件引用。比如我们可以定义一个头文件:
// 定义加法函数声明 int add(int a, int b); // 定义宏 #define MAX_NUM 100
3. 目标文件
后缀为.o的文件是编译后生成的目标文件,是源码经过编译但未链接的中间产物。我们可以使用gcc命令将.c文件编译为目标文件:
gcc -c test.c -o test.o
目标文件已经转换为机器可识别的二进制格式,但还不能直接运行,需要和其他目标文件或者库文件链接后才能生成可执行程序。
4. 可执行文件
没有固定后缀,由链接器将多个目标文件和依赖库链接后生成的可直接运行的文件就是可执行文件。生成可执行文件的命令如下:
gcc test.o -o test
生成后可以直接通过./test命令运行程序。
5. 静态库和动态库文件
后缀为.a的是静态库文件,后缀为.so的是动态库文件,这两种文件是封装好的可复用代码模块,供其他程序链接使用。静态库在链接时会被直接整合到可执行文件中,动态库则是在程序运行时才被加载。
不同类型文件的区分方式
如果不确定一个文件属于哪种linux c相关类型,可以使用file命令查看文件属性:
file test.c file test.o file test
命令会返回文件的具体类型描述,帮助我们快速判断文件的用途。
各类文件的流转关系
linux c程序从编写到运行的完整流程中,各类文件的流转顺序为:.c源码文件经过编译生成.o目标文件,多个.o文件和.a或.so库文件经过链接生成可执行文件。头文件.h则在编译阶段被.c文件引用,参与源码的预处理和编译过程。
| 文件后缀 | 文件类型 | 作用阶段 |
|---|---|---|
| .c | C语言源代码文件 | 开发编写阶段 |
| .h | 头文件 | 编译预处理阶段 |
| .o | 目标文件 | 编译后、链接前 |
| 无后缀 | 可执行文件 | 链接完成后,运行阶段 |
| .a | 静态库文件 | 链接阶段被引用 |
| .so | 动态库文件 | 运行阶段被加载 |