编译、汇编、链接

 

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

image

 

可以拆分为3个动作:

image

 。

image

 

 

 

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

image

 。

 

实际上,gcc 是一个 前端驱动程序(driver),它会根据命令自动调用不同的工具:

  1. 编译器(compiler):把 C/C++ 源代码转换成汇编.s文件

  2. 汇编器(assembler):把汇编代码 .s 转换成目标文件 .o

  3. 链接器(linker,通常是 ld:把目标文件 .o 和库文件 .a/.so 合并生成可执行文件

 

posted @ 2025-12-15 12:58  小鲨鱼2018  阅读(2)  评论(0)    收藏  举报