在没有目标文件的情况下使用映射文件进行链接

Linking using map file without having object files

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

我想知道是否可以 link 针对此 OS 的任何程序针对 OS 的 map file

例如我在OS中实现了memcpy,并制作了一个头文件,将其声明为extern,编译OS并生成映射文件。然后当我想写一个程序时,包含头文件以成功编译它并使 linker 从 OS.

的映射文件中查看 memcpy 的地址

OS是place non-independent,它的函数总是在一个固定的地址,但是程序是place independent ELF文件。没有必要为 OS 的不同版本加载程序。

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

找到