编译器和链接器之间有什么区别?

时间:2010-09-30 14:05:06

标签: c compiler-construction linker terminology

C中的编译器和链接器有什么区别?

2 个答案:

答案 0 :(得分:67)

编译器将以人类可读编程语言编写的代码转换为处理器可以理解的机器代码表示。此步骤创建对象文件。

一旦编译器完成此步骤,就需要另一个步骤来创建可以调用和运行的工作可执行文件,即关联编译代码需要调用的函数调用(例如)以便工作。例如,您的代码可以调用sprintf,这是C标准库中的例程。您的代码没有任何内容可以执行sprintf提供的实际服务,它只报告必须调用它,但实际代码位于公共C库中的某个位置。要执行此(以及许多其他)链接,必须调用链接器。链接后,您将获得可以运行的实际可执行文件。

答案 1 :(得分:24)

编译器从源代码生成目标代码文件(机器语言)。

linker将这些目标代码文件合并为可执行文件。

许多IDE会连续调用它们,因此您实际上从未看到链接器工作。有些语言/编译器没有独特的链接器,链接由编译器完成,作为其工作的一部分。

相关问题