编译、汇编、链接
001、
[b20223040323@admin2 test10]$ ls test.c [b20223040323@admin2 test10]$ cat test.c ## 源代码 #include <stdio.h> int main(void) { printf("hello world\n"); return 0; } [b20223040323@admin2 test10]$ gcc -c test.c -o test.o ## 包含了编译,编译器将源代码转换为汇编代码; 然后汇编器将汇编代码转换为.o的目标文件; test.o是目标文件,不是二进制的可执行程序,下一步需要链接生成二进制的可执行程序。 [b20223040323@admin2 test10]$ ls test.c test.o

可以拆分为3个动作:

。

002、链接 (生成可执行程序) 会把 test.o 与其他目标文件或库文件合并生成可执行程序。
[b20223040323@admin2 test10]$ ls test.c test.o [b20223040323@admin2 test10]$ gcc test.o -o myprogram ## 链接 [b20223040323@admin2 test10]$ ls myprogram test.c test.o [b20223040323@admin2 test10]$ ./myprogram hello world

。
实际上,gcc 是一个 前端驱动程序(driver),它会根据命令自动调用不同的工具:
-
编译器(compiler):把 C/C++ 源代码转换成汇编.s文件
-
汇编器(assembler):把汇编代码
.s转换成目标文件.o -
链接器(linker,通常是
ld):把目标文件.o和库文件.a/.so合并生成可执行文件
。

浙公网安备 33010602011771号