锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

C语言中连接器介绍

时间:2023-12-27 05:37:02 971c连接器

在C语言中,一个重要的想法是单独编译,也就是说,几个源程序可以在不同的时间单独编译,然后在适当的时间集成在一起。但连接器通常与C编译器分离。连接器如何将多个C源程序合并成一个整体?

典型的连接器将编译器或汇编器生成的几个目标模块集成到一个被称为载入模块或可执行文件的实体中,可以由操作系统直接执行。其中,一些目标模块直接作为输入提供给连接器;其他目标模块包括类似的连接过程printf在函数库文件中获得。

连接器通常将目标模块视为由一组外部对象组成。每个外部对象代表机器内存的某部分,并通过外部名称进行识别。因此,如果程序中的每个函数和函数和每个外部变量static,都是外部对象。一些C编译器会改变静态函数和静态变量的名称,并将其作为外部对象。由于名称修改,它们不会与其他源程序文件中的同名函数或同名变量发生冲突。

大多数连接器禁止两个不同的外部对象在同一载入模块中有相同的名称。然而,当多个目标模块集成到一个载入模块中时,这些目标模块可能包含相同名称的外部对象。连接器的一个重要任务是处理这种命名冲突。

处理命名冲突的最简单办法就是干脆完全禁止。对于外部对象是函数的情形,这种做法是正确的。一个程序如果包括两个同名的不同函数,编译器根本就不应该接受。而对于外部对象是变量的情形,问题就变得困难了。不同的连接器对这种情形有着不同的处理方式。

现在谈谈连接器是如何工作的?

输入连接器是一组目标模块和库文件。输出连接器是一个载入模块。在生成载入模块的同时,连接器读入目标模块和库文件。对于每个目标模块中的每个外部对象,连接器应检查载入模块,同名称的外部对象。如果没有,连接器将外部对象添加到模块中;如果有,连接器将开始处理命名冲突。

除外部对象外,目标模块还可能包括引用其他模块中的外部对象。例如:调用函数printfC程序生成的目标模块包括对函数printf的引用。可以推断,引用指向的是位于某个库文件中的外部对象。这些外部对象的引用必须同时记录在连接器生成载入模块的过程中。当连接器读入一个目标模块时,它必须解析出这个目标模块中定义的所有外部对象的引用,并作出标记说明这些外部对象不再是未定义的。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章