diff --git a/notes/pics/compile-pipeline.png b/notes/pics/compile-pipeline.png new file mode 100644 index 00000000..2af854c6 Binary files /dev/null and b/notes/pics/compile-pipeline.png differ diff --git a/notes/pics/dynamic-link.png b/notes/pics/dynamic-link.png new file mode 100644 index 00000000..f0cf19c8 Binary files /dev/null and b/notes/pics/dynamic-link.png differ diff --git a/notes/pics/static-link.png b/notes/pics/static-link.png new file mode 100644 index 00000000..e264f3b7 Binary files /dev/null and b/notes/pics/static-link.png differ diff --git a/notes/计算机操作系统 - 链接.md b/notes/计算机操作系统 - 链接.md index a06caa1b..4a86458d 100644 --- a/notes/计算机操作系统 - 链接.md +++ b/notes/计算机操作系统 - 链接.md @@ -31,7 +31,7 @@ gcc -o hello hello.c 这个过程大致如下: -

+

- 预处理阶段:处理以 # 开头的预处理命令; - 编译阶段:翻译成汇编文件; @@ -45,7 +45,7 @@ gcc -o hello hello.c - 符号解析:每个符号对应于一个函数、一个全局变量或一个静态变量,符号解析的目的是将每个符号引用与一个符号定义关联起来。 - 重定位:链接器通过把每个符号定义与一个内存位置关联起来,然后修改所有对这些符号的引用,使得它们指向这个内存位置。 -

+

## 目标文件 @@ -65,4 +65,4 @@ gcc -o hello hello.c - 在给定的文件系统中一个库只有一个文件,所有引用该库的可执行目标文件都共享这个文件,它不会被复制到引用它的可执行文件中; - 在内存中,一个共享库的 .text 节(已编译程序的机器代码)的一个副本可以被不同的正在运行的进程共享。 -

+