在Abraham Silberschatz等人的第9版操作系统概念"第9版中,作者说:
"Some operating systems support only static linking,
in which system libraries are treated like any other object module
and are combined by **the loader** into the binary program image."
(第381页,第8.1.5节第1段第2句
我想知道链接(合并)是由链接器还是加载器执行的?
感谢。
答案 0 :(得分:1)
(假设为GNU / Linux)
我认为这是打字错误。
静态链接由链接器完成,您可以在其中获得包含程序代码和您要链接的库的代码的二进制程序映像;加载器将简单地加载您的程序作为一个整体。
使用Gnu C Compiler包,您可以使用如下静态链接:gcc -static code.c
要检查结果确实不包含动态加载库的标记:
ldd a.out
,您会收到如下消息:not a dynamic executable
当动态链接到库时,链接器在技术上只会在生成的二进制映像中留下一个小标记,表明需要加载库“x”以便程序执行。 当加载程序读取这个二进制图像时,它会注意到标记并加载库;这个动作永远不会在静态链接中完成,因为整个事物变成了一个大的二进制图像。