链接器是操作系统还是编译器/ IDE的一部分?
答案 0 :(得分:7)
它是编译器/ IDE的一部分。或者确切地说,编译器和链接器是单独的程序(在构建可执行文件的不同阶段调用),但通常整个群集(包括其他几个可执行文件)被称为编译器,例如GCC。
链接器不是操作系统的一部分,尽管某些操作系统(如Linux)可能与一个(甚至多个)链接器捆绑在一起,作为某些编译器工具链的一部分。无论如何,您可以在同一操作系统上安装和使用多个不同的编译器(每个编译器都包含自己的链接器)。例如。在Windows操作系统上,您可以安装gcc和msvc,但gcc不能与Visual Studio IDE一起使用,因为它只与msvc捆绑在一起。但AFAIK Eclipse可以使用。
更新:您似乎对操作系统的linker in the compiler toolchain和dynamic linker之间的名称相似性感到困惑。
编译器工具链的链接器在构建过程中完成其工作,当需要将不同的编译单元拼接在一起以形成连贯的可执行程序时。通常,代码包含对外部库的调用;这些库可以是静态或动态。静态库基本上是可执行方法的存储,链接器可以将其物理复制到可执行文件中。动态库包含不需要复制的方法;相反,链接器将对库方法的一种引用存储到可执行文件中。运行可执行文件时,在OS的帮助下动态库已加载,然后调用库方法。这是由操作系统的一部分完成的,相当不幸的是,它被称为动态链接器 - 但是这与编译器工具链中的链接器完全不同,而应该被称为 loader < / em>的
动态库可以在内存中共享,即多个可执行文件可以并行使用相同的库代码(因此它们也称为共享库)。而从静态库复制的代码在所有可执行文件中都是重复的。
答案 1 :(得分:1)
链接器是编译器工具链的一部分(预处理器 - &gt;编译器 - &gt;汇编器 - >链接器)。
答案 2 :(得分:0)
它通常是编译器的一部分。从技术上讲,编译器和链接器是不同的工具,但它们通常结合在一起。