C语言的编译就是将多个C文件编译成一个可执行文件,包含4个步骤:预处理 -> 编译 -> 汇编 -> 链接
使用示例
// mymath.h
#ifndef TESTC_MYMATH_H
#define TESTC_MYMATH_H
int add(int a, int b);
int sub(int a, int b);
#endif //TESTC_MYMATH_H
// mymath.c
#include "mymath.h"
int add(int a, int b) {
return a + b;
}
int sub(int a, int b) {
return a - b;
}
// main.c
#include <stdio.h>
#include "mymath.h"
int main() {
printf("12 + 2 = %d", add(12, 2));
printf("12 - 2 = %d", sub(12, 2));
return 0;
}
- 预处理(预编译)
预处理将所有的#include头文件以及宏定义替换成其真正的内容,预处理之后仍然是文本文件
gcc -E mymath.c -o mymath.i
gcc -E main.c -o main.i
- 编译
将经过预处理之后的程序转换成特定汇编代码,编译之后仍然是文本文件
gcc -S mymath.i -o mymath.s
gcc -S main.i -o main.s
- 汇编
汇编过程将上一步的汇编代码转换成机器码,这一步产生的文件(目标文件)是二进制格式
gcc -c mymath.s -o mymath.o
gcc -c main.s -o main.o
- 链接
链接过程将多个目标文以及所需的库文件(.so等)链接成最终的可执行文件
gcc mymath.o main.o -o main