linux进程-从文件到二进制
gcc命令
gcc [option] file1 file2 //不加入参数,则按照默认参数依次执行编译、汇编和链接操作,生成可执行的文件名a.out
编译的过程
- 预处理
- 编译
- 汇编
- 链接
参数
新建一个hello.c文件
#include<stdio.h>
int main()
{
printf("hello world!");
}
-
-E
只执行预处理操作,宏展开,将头文件嵌入到正文中
gcc -E hello.c -o hello.i
执行之后生成hello.i文件,打开文件我们会发现stdio.h包被展开了
-
-S
只激活预处理和编译,就是把文件编译成汇编代码
gcc -S hello.c #生成hello.s文件
查看一下hello.s文件
-
-c
只激活预处理,编译和汇编,也就是它把程序做成obj文件。最终编译成.o文件,这是**ELF(**Executeable and Linkable Format , 可执行与可链接文件) 的第一种类型,可重定位文件
gcc -c hello.c #生成hello.o文件
-
链接
生成可运行的hello文件
gcc hello.o -o hello
使用 nm 查看hello.o
0000000000000000 T main U printf
发现printf并没有被分配地址,此时就体现了链接的作用,接下来 使用
nm hello<