【问题标题】:Linking using map file without having object files在没有目标文件的情况下使用地图文件进行链接
【发布时间】:2020-08-08 02:30:37
【问题描述】:

我想为资源非常有限的嵌入式设备(ESP8266)创建一个操作系统,可以将ELF文件作为程序或共享对象加载(共享对象是第二重要的)。

我想知道是否可以将此操作系统的任何程序与操作系统的map file 链接?

例如,我在操作系统中实现memcpy 并制作一个头文件,将其声明为extern,编译操作系统并生成映射文件。然后当我想编写一个程序时,包含头文件以成功编译它并让链接器从操作系统的映射文件中窥视memcpy的地址。

操作系统是非独立的,它的功能总是在一个固定的地址,但程序是独立的 ELF 文件。没有必要为不同的操作系统版本编写可加载的程序。

【问题讨论】:

  • 你用的是什么工具链?它们都有点不同。
  • Gnu 工具链,当然。 ld 来自 binutils

标签: linker operating-system embedded elf linker-scripts


【解决方案1】:

这绝不是在嵌入式目标上运行 ELF 问题的完整解决方案,但对于在链接过程中提供已知地址的特定问题,GNU LD 允许您为定义为 extern 的代码中的符号提供地址添加PROVIDE 语句或对链接描述文件的简单赋值。 LD 不会直接读取映射文件,但您可以解析映射文件,找到相关地址,生成提供了适当符号的链接描述文件,并在编译 ELF 时使用该链接描述文件。提供和分配功能的文档可以在https://sourceware.org/binutils/docs/ld/Assignments.html找到。

【讨论】:

    猜你喜欢
    • 2018-02-12
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2012-03-17
    相关资源
    最近更新 更多