在C语言中,编译器和链接器有什么区别?
编译器将用人类可读的编程语言编写的代码转换为机器码表示形式,该表示形式可以被您的处理器理解。这一步骤创建了目标文件。
编译器完成此步骤后,需要另一步骤来创建一个可被调用和运行的工作可执行文件,即关联编译后的代码需要调用的函数调用。例如,您的代码可能会调用 C 标准库中的例程 sprintf
,而您的代码中没有实际执行 sprintf
提供的服务的内容,它只是报告必须调用,但实际代码位于公共 C 库中的某个地方。为了执行这些(和许多其他)链接,必须调用链接器。链接之后,您将获得实际可运行的可执行文件。
编译器从源代码生成目标代码文件(机器语言)。
链接器将这些目标代码文件组合成一个可执行文件。
许多集成开发环境按顺序调用它们,因此您实际上看不到链接器的工作过程。有些语言/编译器没有独立的链接器,链接是由编译器作为其工作的一部分完成的。