美文网首页
模块拼装---静态链接

模块拼装---静态链接

作者: Crazy2015 | 来源:发表于2018-09-24 19:15 被阅读12次

每个源代码模块独立地编译,然后按照需要将它们“组装”起来,这个组装模块的过程就是链接(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语言源代码文件中的所有全局变量和函数经过编译以后,相对应的符号名前加上下划线“_”

相关文章

  • 模块拼装---静态链接

    每个源代码模块独立地编译,然后按照需要将它们“组装”起来,这个组装模块的过程就是链接(Linking).链接的主要...

  • 使用Swift创建Swift模块 - 静态链接库

    使用Swift创建Swift模块 - 静态链接库 使用Swift创建Swift模块 - 静态链接库

  • 02--编译过程

    [TOC] 通过本章的学习,要了解到以下几个问题 被隐藏了的过程 编译器做了什么 链接器和编译器 模块拼装——静态...

  • 软件包管理

    软件运行和编译 链接主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接,分为静态链接和动...

  • 操作系统

    • Linux静态链接和动态链接; (转)静态链接和动态链接1、静态链接静态链接方法:#pragma comme...

  • iOS系统底层之动态链接

    为什么要动态链接 动态链接及优点 动态链接思想:把程序的模块相互分割开来,形成独立的文件,而不再将它们静态地链接在...

  • Linux网络安全技术与实现(7层防火墙)

    动态模块和静态模块

  • iOS 动态库与静态库

    声明: 原文链接 动态库 与 静态库 使用静态库的好处1,模块化,分工合作2,避免少量改动经常导致大量的重复编译连...

  • TypeScript 常用语法详解

    本文参考链接:TypeScript 基本语法 1. 类 继承 修饰符 get,set 访问器 静态属性 2.模块(...

  • 静态链接

    静态链接 静态链接涉及的内容包含如下 空间地址的分配 符号解析和重定位 静态库链接 本文的测试代码以及其他文件存在...

网友评论

      本文标题:模块拼装---静态链接

      本文链接:https://www.haomeiwen.com/subject/ubqhoftx.html