程序员的自我修养-可执行文件的装载

程序员的自我修养-可执行文件的装载

可执行文件的装载与进程

可执行文件只有装载到内存以后才能被 CPU 执行。早期的程序装载十分简陋,装载的基本过程就是把程序从外部存储器中读取到内存中的某个位置。随着硬件 MMU 的诞生,多进程,多用户,虚拟存储的操作系统出现,可执行文件的装载过程变得非常复杂。

Read more
程序员的自我修养-静态链接
程序员的自我修养—目标文件里有什么

程序员的自我修养—目标文件里有什么

第三章的后半部分

链接的接口

  • 链接的本质是要把多个不同的目标文件之间相互"粘"在一起。为了使不同的目标文件可以相互粘合,这些目标文件之间必须有固定的格式。
    • 在链接中,目标文件之间相互拼合实际上是目标文件之间对地址的引用,即对函数和变量的地址的引用。
Read more
程序员的自我修养—目标文件里有什么

程序员的自我修养—目标文件里有什么

  • 2020.2.2 更新补充内容

迟到的更新

在开始这一章之前,先复习一下gcc的操作

复习

  • -c
    只编译,不链接成为可执行文件。编译器只是由输入的 .c 等源代码文件生成 .o 为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
  • -o output_filename
    确定输出文件的名称为output_filename。同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出默认的可执行文件 a.out
Read more
程序员的自我修养——编译和链接

程序员的自我修养——编译和链接

编译和链接

在一般的IDE中,编译和链接被合并在了一起,称为构建(build),往往一些本质的东西是无法了解到

被隐藏的过程

在Linux下如果使用gcc编译一个c语言程序,只需最简单的命令:
gcc hello.c
./a.out

事实上,上述的过程可以分为4个步骤:

  • 预处理(Prepressing)
  • 编译(Compilation)
  • 汇编(Assembly)
  • 链接(Linking)

GCC编译过程

Read more