Linker 使用地图文件而不使用对象文件进行链接

Linker 使用地图文件而不使用对象文件进行链接,linker,operating-system,embedded,elf,linker-scripts,Linker,Operating System,Embedded,Elf,Linker Scripts,我想为资源非常有限的嵌入式设备(ESP8266)创建一个操作系统,它可以将ELF文件作为程序或共享对象加载(共享对象是第二重要的) 我想知道是否可以将此操作系统的任何程序链接到操作系统的映射文件 例如,我在操作系统中实现memcpy,并创建一个头文件,将其声明为extern,编译操作系统并生成映射文件。然后,当我想编写一个程序时,包括头文件以成功编译它,并使链接器从OS的映射文件中窥视memcpy的地址 操作系统是位置非独立的,其功能始终位于固定地址,但程序是位置独立的ELF文件。对于不同版本的

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

我想知道是否可以将此操作系统的任何程序链接到操作系统的
映射文件

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


操作系统是位置非独立的,其功能始终位于固定地址,但程序是位置独立的ELF文件。对于不同版本的操作系统,程序不必是可加载的

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

您使用的工具链中找到?它们都有点不同,当然是Gnu工具链。来自比努蒂尔斯的ld