模块拼装---静态链接

每个源代码模块独立地编译,然后按照需要将它们“组装”起来,这个组装模块的过程就是链接(Linking).链接的主要内容就是把各个模块之间相互引用的部分都处理好,使得各个模块之间能够正确的衔接。

每个模块的源代码文件(如.c)文件经过编译器编译成目标文件(Object File, 一般扩展名为.o或.obj),目标文件和库(Library)一起链接形成最终可执行文件。

前提:在程序模块main.c中使用另外一个模块func.c的函数foo().

使用链接器,你可以直接引用其他模块的函数和全局变量而无须知道它们的地址,因为链接器在链接的时候,会根据你所引用的符号foo, 自动去相应的func.c模块查找foo的地址,然后将main.c模块中所有引用到foo的指令重新修正,让它们的目标地址为真正的foo函数的地址。这就是静态链接的最基本的过程和作用。

链接的接口-符号

链接过程的本质就是要把多个不同的目标文件之间相互“粘”到一起,为了使不同目标文件之间能够相互粘合,这些目标文件之间必须有固定的规则才行。

在链接中,目标文件之间相互拼合实际上是目标文件之间对地址的引用,即对函数和变量地址的引用。比如目标文件B要用到了目标文件A中的函数“foo”,那么我们就成目标文件A定义(Define)函数“foo”, 称目标文件B引用(Reference)了目标文件A中的函数“foo”

为了防止类似的符号名冲突,UNIX下的C语言规定,C语言源代码文件中的所有全局变量和函数经过编译以后,相对应的符号名前加上下划线“_”

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容