每个源程序模块独立地编译,然后按照要求将它们组装起来,这个模块组装的过程就是链接。连接的主要内容是将各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接。链接分为静态链接和动态链接。
对函数库的链接是放在编译时期完成的叫做静态链接。所有相关的目标文件与牵涉的函数库被链接合成一个可执行文件。在程序运行时刻,与函数库就再无瓜葛,因为所有需要的函数已经复制到相关位置。这些函数库被称为静态库。
-
动态链接库有利于进程间资源共享:当程序运行期间需要调用动态链接库,操作系统会首先查看正在运行的所有程序,在内存中查看是否已有此库函数的拷贝,若有,让其共享那一个拷贝,若没有,才载入。此做法虽然会带来动态链接的额外开销,但是却大大节省了系统的内存开销。静态链接则不同,当有多个程序需要调用某一静态链接库函数时,每个程序都要将这个库函数拷贝到自己的代码段中,这种做法将耗费更多的内存资源。
-
动态链接库有利于程序升级:使用静态链接库,当库中的函数发生改变,使用库函数的程序需要重新编译;但如果使用动态链接库,只要动态链接库的函数接口不变,只用重新生成动态库替换之前的就可以。
-
程序执行速度不同:使用静态链接库,在编译时,就将库函数装载到程序中去,而动态链接是在运行时才执行装载,所以在程序运行时,使用静态链接速度更快。
文章目录链接静态链接动态链接静态链接库、动态链接库的特点链接每个源程序模块独立地编译,然后按照要求将它们组装起来,这个模块组装的过程就是链接。连接的主要内容是将各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接。链接分为静态链接和动态链接。静态链接对函数库的链接是放在编译时期完成的叫做静态链接。所有相关的目标文件与牵涉的函数库被链接合成一个可执行文件。在程序运行时刻,与函数库...
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)的转化过程,有以下几步:
预处理器在预处理阶
在计算机科学中,动态连结点和
静态
连结点是两个重要概念。
静态
连结点是指在程序编译时就已经确定的连接关系。例如,当我们在程序中使用一个库时,我们需要在编译时将库的路径加入到程序中,这样程序在运行时才能正确地调用库中的函数。在这种情况下,库是一个
静态
连结点。
动态连结点是指在程序运行时才确定的连接关系。例如,当我们使用操作系统提供的
动态链接
库时,程序在运行时才会将
动态链接
库加载到内存中,并建立起程序和库之间的连接关系。在这种情况下,库是一个动态连结点。
总之,
静态
连结点是在编译时就确定的连接关系,而动态连结点是在程序运行时才确定的连接关系。