每个源程序模块独立地编译,然后按照要求将它们组装起来,这个模块组装的过程就是链接。连接的主要内容是将各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接。链接分为静态链接和动态链接。

对函数库的链接是放在编译时期完成的叫做静态链接。所有相关的目标文件与牵涉的函数库被链接合成一个可执行文件。在程序运行时刻,与函数库就再无瓜葛,因为所有需要的函数已经复制到相关位置。这些函数库被称为静态库。

动态链接就是将一些函数库的链接推迟到程序运行时期。

静态链接库、动态链接库的特点

  • 动态链接库有利于进程间资源共享:当程序运行期间需要调用动态链接库,操作系统会首先查看正在运行的所有程序,在内存中查看是否已有此库函数的拷贝,若有,让其共享那一个拷贝,若没有,才载入。此做法虽然会带来动态链接的额外开销,但是却大大节省了系统的内存开销。静态链接则不同,当有多个程序需要调用某一静态链接库函数时,每个程序都要将这个库函数拷贝到自己的代码段中,这种做法将耗费更多的内存资源。
  • 动态链接库有利于程序升级:使用静态链接库,当库中的函数发生改变,使用库函数的程序需要重新编译;但如果使用动态链接库,只要动态链接库的函数接口不变,只用重新生成动态库替换之前的就可以。
  • 程序执行速度不同:使用静态链接库,在编译时,就将库函数装载到程序中去,而动态链接是在运行时才执行装载,所以在程序运行时,使用静态链接速度更快。
文章目录链接静态链接动态链接静态链接库、动态链接库的特点链接每个源程序模块独立地编译,然后按照要求将它们组装起来,这个模块组装的过程就是链接。连接的主要内容是将各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接。链接分为静态链接和动态链接。静态链接对函数库的链接是放在编译时期完成的叫做静态链接。所有相关的目标文件与牵涉的函数库被链接合成一个可执行文件。在程序运行时刻,与函数库... 1. 首先对源文件进行预处理。(如宏、#include、预编译指令#ifdef等) 生成.i文件,这个过程也叫做预编译(Processing) 2.然后进行编译,这个过程主要是进行词法分析、语法分析和语义分析等,生成.s的汇编文件; 3.最后进行汇编,这个过程比较简单,就是将对应的汇编指令翻译成机器指令,生成可重定位的二进制目标文件。生成.o文件
原文:https://www.cnblogs.com/skynet/p/3372855.html 看到一篇介绍 静态 链接 库和 动态链接 库的文章,写的太好了,遂转载过来分享一下。 这次分享的宗旨是——让大家学会创建与使用 静态 库、动态库,知道 静态 库与动态库的区别,知道使用的时候如何选择。这里不深入介绍 静态 库、动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养—— 链接 、装载与库》。...
文章目录 静态 链接 动态链接 说起 静态 链接 动态链接 ,大家肯定都不陌生。 静态 链接 动态链接 的差别顾名思义, 动态链接 使动态库中的函数在程序运行后,才被用到;而 静态 链接 则在运行前,就将所需函数合并了。 我们来看看两者在 Linux 下的定义: 静态 链接 静态 链接 :Linux 下的 静态 链接 器(static linker)以一组可重定位目标文件和命令行参数作为输人,生成一个完全 链接 的、可以加载和运行的可执行目标文件作为输出。 所有的编译系统都提供一种机制,将所有相关的目标模块打包成为一个单独的文件,称为 静态 库(stat
注:我的笔记风格,可能不会特别官方,不会晦涩难懂,而是以一个初学者能看懂的方式把知识呈现出来,用最简单的语言把抽象的概念表达出来~ 动态链接 静态 链接 链接 器在 链接 阶段的两种方式, 链接 器是什么? 链接 阶段又是什么? 请往下看~ 一、代码由源代码(.c)到可执行文件(.exe)的转化过程 代码由源代码(.c)到可执行文件(.exe)的转化过程,有以下几步: 预处理器在预处理阶
在计算机科学中,动态连结点和 静态 连结点是两个重要概念。 静态 连结点是指在程序编译时就已经确定的连接关系。例如,当我们在程序中使用一个库时,我们需要在编译时将库的路径加入到程序中,这样程序在运行时才能正确地调用库中的函数。在这种情况下,库是一个 静态 连结点。 动态连结点是指在程序运行时才确定的连接关系。例如,当我们使用操作系统提供的 动态链接 库时,程序在运行时才会将 动态链接 库加载到内存中,并建立起程序和库之间的连接关系。在这种情况下,库是一个动态连结点。 总之, 静态 连结点是在编译时就确定的连接关系,而动态连结点是在程序运行时才确定的连接关系。