c++ - 我想知道我们使用的ide是否包含链接器

标签 c++ c windows operating-system unix

链接器是操作系统还是编译器/IDE 的一部分?

最佳答案

它是编译器/IDE 的一部分。或者更准确地说,编译器和链接器是独立的程序(在构建可执行文件的不同阶段调用),但通常整个程序组(包括其他几个可执行文件)被称为编译器,例如海合会。

链接器不是操作系统的一部分,尽管某些操作系统(例如 Linux)可能与一个(甚至多个)链接器捆绑在一起作为某些编译器工具链的一部分。不管怎样,您可以在同一个操作系统上安装和使用多个不同的编译器(每个编译器都包含自己的链接器)。例如。在 Windows 操作系统上,您可以同时拥有 gccmsvc安装,虽然 gcc 不能与 Visual Studio IDE 一起使用,因为它只与 msvc 捆绑在一起。但是 AFAIK Eclipse可以使用任何一个。

更新:您似乎对 linker in the compiler toolchain 之间的名称相似性感到困惑和 dynamic linker操作系统。

编译器工具链的链接器在构建过程中完成它的工作,当它需要将不同的编译单元拼凑在一起以形成连贯的可执行程序时。通常,代码包含对外部库的调用;这些库可以是静态动态。静态库基本上是可执行方法的存储,链接器可以将其物理复制到可执行文件中。动态库包含不需要复制的方法;相反,链接器将对库方法的一种引用存储到可执行文件中。当可执行文件运行时,在操作系统的帮助下加载动态库,然后调用库方法。这是由操作系统的一部分完成的,不幸的是,它被称为动态链接器 - 然而这与编译器工具链中的链接器完全不同,应该被称为加载器.

动态库可以在内存中共享,即相同的库代码可以被多个可执行文件并行使用(因此它们也被称为共享库)。而从静态库复制的代码在所有可执行文件中都是重复的。

关于c++ - 我想知道我们使用的ide是否包含链接器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3654264/

相关文章:

C++ : Starting a timer from a certain timestamp, 并递增它

c++ - Windows 10 中的 GetModuleInformation 链接失败

C:释放二叉搜索树

c - C 中的 block 中的 read() 和 write() 非文本文件

python - Windows:获取默认麦克风名称

c++ - QueryPerformanceCounter 的性能影响

c++ - 我执行 Verhulst 公式有什么问题吗?

c++ - 如果我返回一个const定义的对象,为什么const关键字不合格?

string - 为什么子字符串不能与命令行参数一起使用?

c - C中的函数调用需要多少条机器指令?