基于RISC-V的编译链接和装载01之概论

基于RISC-V的编译链接和装载01之概论

对于底层软件开发者来说,如果想系统的了解程序的链接装载过程,《程序员的自我修养—链接、装载与库》是一本很好的书,但是这本书存在如下几个问题:

  • 这本书是2009年出版,时代比较遥远,有些内容需要更新;
  • 书中约有一小半Windows相关内容,对于linux嵌入式工程师来说是不需要了解的,Windows和linux混在一起容易让重点不突出;
  • 书中穿插了一些C++知识,对嵌入式C工程师而言,也非必需;
  • 书中以x86为例作为讲解的,但本系列改用以RISC-V为例作为讲解。(当然,不同指令集的编译链接过程大同小异,但我觉得RISC-V没有历史包袱,实现更简洁)

基于上述原因,我觉得有必要重新梳理这块内容,本系列基于RISC-V平台讲述了编译-链接-装载过程,本系列参考一些大佬的文章,文末有列出参考,一并表示感谢。

这系列文章准备先介绍ELF格式,ELF格式全称为Executable and Linkable Format(可执行可链接格式),由这个名字可以看出,ELF包含执行与链接两方面作用,ELF格式是链接装载的基础,所以放在前面介绍,然后介绍编译,链接,和装载。

文中使用了一些测试用例用来辅助讲解,见github:https://github.com/surez-ok/riscv-elf-link-load.git

文章链接如下:

  1. 基于RISC-V的编译链接和装载01之概论
  2. 基于RISC-V的编译链接和装载02之ELF格式简介
  3. 基于RISC-V的编译链接和装载03之ELF文件头详解
  4. 基于RISC-V的编译链接和装载04之ELF之节(section)
  5. 基于RISC-V的编译链接和装载05之ELF之段(segment)
  6. 基于RISC-V的编译链接和装载06之编译
  7. 基于RISC-V的编译链接和装载07之静态链接
  8. 基于RISC-V的编译链接和装载08之静态ELF装载
  9. 基于RISC-V的编译链接和装载09之动态链接1
  10. 基于RISC-V的编译链接和装载10之动态链接2
  11. 基于RISC-V的编译链接和装载11之动态链接3
  12. 基于RISC-V的编译链接和装载12之动态ELF装载
  13. 基于RISC-V的编译链接和装载13之ld链接脚本
  14. 基于RISC-V的编译链接和装载14之链接时的map文件
  15. 基于RISC-V的编译链接和装载15之链接器的垃圾回收
  16. 基于RISC-V的编译链接和装载16之链接器松弛
  17. [基于RISC-V的编译链接和装载17之linker overlay](基于RISC-V的编译链接和装载17之linker overlay.md)
  18. 基于RISC-V的编译链接和装载18之库与运行环境

参考:

  1. 《程序员的自我修养—链接、装载与库》
posted @ 2026-10-24 16:34  sureZ_ok  阅读(8)  评论(0)    收藏  举报