执行过程示例
-
示例代码
1
2
3
4
5
6
7
|
#include <stdio.h>
int
main(
void
)
{
printf
(
"hello\n"
);
return
0;
}
|
-
预编译过程
这个过程处理
宏定义和include,并做语法检查。
可以看到
预编译后,代码从6行扩展到了910行。
gcc -E a.c -o a.i
cat a.c | wc -l
5
cat a.i | wc -l
910
-
编译过程
这个阶段,生成
汇编代码。
gcc -S a.i -o a.s
cat a.s | wc -l
59
-
汇编过程
这个阶段,生成
目标代码。
此过程生成ELF格式的
目标代码。
gcc -c a.s -o a.o
file a.o
a.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
-
链接过程
链接过程。生成
可执行代码。链接分为两种,一种是
静态链接,另外一种是
动态链接。使用
静态链接的好处是,依赖的
动态链接库较少,对动态链接库的版本不会很敏感,具有较好的兼容性;缺点是生成的程序比较大。使用
动态链接的好处是,生成的程序比较小,占用较少的内存。
gcc a.o -o a
程序运行:
./a
hello
gcc a.c -o a
gcc a.c -o a