在没有目标文件的情况下使用映射文件进行链接
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
找到
我想为资源非常有限的嵌入式设备(一个 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