C程序编译步骤
C代码编译成可执行程序经过4步:
- 预处理:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法
- 编译:检查语法,将预处理后文件编译生成汇编文件
- 汇编:将汇编文件生成目标文件(二进制文件)
- 链接:C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去
VS 执行结果一闪而过的解决方法:
system("pause");
项目->属性->配置属性->链接器->系统->子系统->控制台 增加“/SUBSYSTEM:CONSOLE”链接选项即可
gcc 编译过程
1. 分步编译
预处理:
gcc -E introduce.c -o introduce.i
编 译:
gcc -S introduce.i -o introduce.s
汇 编:
gcc -c introduce.s -o introduce.o
链 接:
gcc introduce.o -o introduce
选项 | 含义 |
-E | 只进行预处理 |
-S(大写) | 只进行预处理和编译 |
-c(小写) | 只进行预处理、编译和汇编 |
-o file | 指定生成的输出文件名为 file |
文件后缀 | 含义 |
.c | C 语言文件 |
.i | 预处理后的 C 语言文件 |
.s | 编译后的汇编文件 |
.o | 编译后的目标文件 |
编译的时候最后两倒数第二步的时候用了大写C
gcc -C introduce.s -o introduce.o
gcc introduce.o -o introduce
导致了如下问题, 记录一下
正确的编译过程
2. 一步编译
gcc introduce.c -o introduce1
// 自动完成:预处理、编译、汇编、链接的过程
查找程序所依赖的动态库
Windows平台下,需要相应软件(Depends.exe
):
工具下载地址:http://www.dependencywalker.com/