使用地图文件进行链接,而没有对象文件



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

我想知道是否有可能将该操作系统的任何程序与操作系统的map file链接起来?

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

操作系统是位置非独立的,其功能总是在一个固定的地址,但程序是位置独立的ELF文件。没有必要对不同版本的OS进行可加载的编程。

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

最新更新