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

问题描述:

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

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

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

+20

+1很好的解释。请注意,在大多数操作系统中,实际上有两个*链接器:编译后生成可执行文件(通常称为“链接器”)的链接器,以及链接到动态加载库(也称为.so或。 DLL)在执行时(通常称为“动态链接器”)。 – sleske 2010-09-30 14:14:07

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

A linker将这些目标代码文件组合成可执行文件。

许多IDE都会连续调用它们,所以您绝对不会看到链接器在工作。有些语言/编译器没有独特的链接器,链接由编译器完成,作为其工作的一部分。