我不完全理解为什么我们需要一个链接器。编译器首先将高级代码转换为汇编代码,然后将此汇编代码转换为机器代码。我们想要的一切(除了加载此代码的地址除外)都存在。为什么需要单独的链接器模块? 假设我的程序是
printf("Hello Basic Question!");
这个C代码转换为一堆汇编指令。当我们说Linker解析对printf
的引用时,我不明白。你能详细说明吗?
这是否意味着在某些库中printf
和汇编指令之间存在映射,链接器只是简单地将该映射拉出来并将printf
替换为该映射?
答案 0 :(得分:3)
printf
是一个不在您的代码中但在对象库中的函数。
printf
调用一些内核函数来输出您的消息。
链接器解析引用,从库中提取对象模块并将它们添加到可执行文件中。它还解析了对调用内核函数的引用,并生成了操作系统loader module
用来分配内存,加载和执行代码的所有数据结构。