静态链接与动态链接

2023-11-05

C代码编译生成可执行程序会经过如下过程:

链接就是把目标文件与一些库文件生成可执行文件的一个过程。

1、什么是静态链接?

静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法。

链接器是一个独立程序,将一个或多个库或目标文件(先前由编译器或汇编器生成)链接到一块生成可执行程序。

这里的库指的是静态链接库,Windows下以.lib为后缀,Linux下以.a为后缀。

2、什么是动态链接?

动态链接(Dynamic Linking),把链接这个过程推迟到了运行时再进行,在可执行文件装载时或运行时,由操作系统的装载程序加载库。

这里的库指的是动态链接库,Windows下以.dll为后缀,Linux下以.so为后缀。

值得一提的是,在Windows下的动态链接也可以用到.lib为后缀的文件,但这里的.lib文件叫做导入库,是由.dll文件生成的。

3、静态链接与动态链接的优缺点?

(1)静态链接的优缺点:

优点:

  • 代码装载速度快,执行速度略比动态链接库快;

  • 只需保证在开发者的计算机中有正确的.lib文件,在以二进制形式发布程序时不需考虑在用户的计算机上.lib文件是否存在及版本问题。

缺点:

  • 使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费。

(2)动态链接的优缺点:

优点:

  • 生成的可执行文件较静态链接生成的可执行文件小;

  • 适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试;

  • 不同编程语言编写的程序只要按照函数调用约定就可以调用同一个DLL函数;

  • DLL文件与EXE文件独立,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换DLL文件不会对EXE文件造成任何影响,因而极大地提高了可维护性和可扩展性;

缺点:

  • 使用动态链接库的应用程序不是自完备的,它依赖的DLL模块也要存在,如果使用载入时动态链接,程序启动时发现DLL不存在,系统将终止程序并给出错误信息;

  • 速度比静态链接慢;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

静态链接与动态链接 的相关文章

随机推荐

  • 使用PIL实现图像的二值化和灰度化DIY

    使用PIL实现图像的二值化和灰度化并输出保存 精简版代码如下 图片二值化 from PIL import Image img Image open r W PY newpicpic bbvvasd jpg 模式L 为灰色图像 它的每个像素用
  • 编译KArchive在windows10下

    使用QT6和VS2019编译KArchive的简要步骤 安装 Qt 我是用源码自己编译的 F qtbuild 安装CMakefile并配置环境变量 安装Git 下载ECM源码 https github com KDE extra cmake
  • linux安装mysql的两种方式

    一 安装到linux 1 安装mysql server 1 在安装之前查看下系统是否已经安装了mysql ls usr share 2 安装mysql server sudo apt get install mysql server 3 再
  • Linux查看并杀死进程

    Linux查看并杀死进程 查看进程 方法一 lsof i 80 i lt 条件 gt 列出符合条件的进程 协议 端口 ip 方法二 netstat anp grep 进程ID a或 all 显示所有连线中的Socket n或 numeric
  • 基于springboot,hdfs的网盘系统(查看,上传,下载,删除,新建文件)

    基于maven的springboot项目 项目目录如下 类路径如下 HDFSREQUEST package cn object demo02 controller import lombok Data import lombok AllAr
  • JAVA中常用的Queue的介绍

    目录 1 java中队列的分类以及队列的介绍 2 PriorityQueue队列的介绍 2 1 PriorityQueue继承结构和方法解读 2 2 PriorityQueue的构造器的实现 3 Deque 双向队列 的简单介绍 3 1 A
  • H . 真签到题

    题目链接 题目描述 Fibonacci 数列 f n f n 1 f n 2 前n项为1 1 2 3 5 8 给出n m 需要你计算出满足条件的对数 i j 的个数 且i lt j 条件是 1 lt gcd f i f j lt n i j
  • 2021-01-23MNIST 测试实战

    通过多个 step 来完成整个训练集的一次迭代 叫做一个 Epoch 在实际训练时 通常需要对数据集迭代多个 Epoch 才能取得较好地训练效果 for epoch in range 20 完成一个 Batch 的数据训练 叫做一个 Ste
  • Docker笔记--查看本地镜像、搜索镜像、拉取镜像和删除镜像

    目录 1 查看本地镜像 2 搜索镜像 3 拉取镜像 4 删除镜像 1 查看本地镜像 sudo docker images 其中 REPOSITORY 表示镜像的名称 TAG 表示版本号 默认下载最新版本latest IMAGE ID表示镜像
  • 创业之路-67]:创业公司不同的产品模式

    模式1 科研型 预研型 3 5年 市场还不成熟 需求还没有显性 属于预测性需求 行业内还没有的成熟的产品形态 行业和自身的技术也都不成熟 还需要一定的酝酿期和技术积累 产品研发通常需要三年以上 甚至五年以上 需要投资资金烧钱 做未来的事 前
  • python读取fits第三方库_python-astropy.io.fits从具有多个HDU的大型fits文件中读取行

    我有一个约50GB的fits文件 其中包含多个HDU 它们都具有相同的格式 一个带有1E5对象和1E6时间戳的 1E5 x 1E6 数组 HDU描述了不同的物理属性 例如磁通 RA DEC等 我只想从每个HDU中读取5个对象 即 5 x 1
  • Databend 开源周报 第 97 期

    Databend 是一款现代云数仓 专为弹性和高效设计 为您的大规模分析需求保驾护航 自由且开源 即刻体验云服务 https app databend cn What s On In Databend 探索 Databend 本周新进展 遇
  • v.douyin.com生成制作抖音缩短口令网址php接口方法

    v douyin com是抖音官方的接口 可以制作头条 火山 抖音短视频等官方域名的任意生成接口 可以推广抖音号 第三方网址 头条文章等 效果非常号 这里记录下api接口 纯技术php生成 具体规则可以去抖音的开放平台去申请对应接口 这里用
  • 原码,反码,补码

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net Jason M Ho article details 78700434 数值在计算机中是以补码的方式存储的 在探求为何计算机要使用补码之前 让我们先
  • 今日头条(OCPC)广告激活数据对接-JAVA版

    最近在今日头条投广告 头条反馈可以按照实际激活数据的转换来付费 也就是说 只有用户真的下载并打开应用了才收费 过程类似与早年间的GHOST系统预装软件 下面说下头条的整个逻辑 头条处理逻辑 1 用户在头条点击广告页 广告页引领用户去下载 用
  • Day4 Data Management II part1 ifelse/loop/function in R

    This article is based on R 4 1 2 1 ifelse if else a Identifying fulfilled conditions all condition Returns TRUE if the c
  • 【Ansible自动化运维工具】Ansible变量之lookup生成变量方法

    Ansible自动化运维工具 Ansible变量之lookup生成变量方法 一 lookup插件介绍 1 lookup简介 2 lookup使用场景 3 lookup获取的数据源 4 lookup的注意事项 二 查看lookup支持的模块列
  • 2023WAIC大会后记:我们距离AGI还有多远?

    只有解决了算力问题 才能离大模型的商业化之路更进一步 等等问题 都在成为当下限制我们想象力的关键因素 继2023世界人工智能大会后 大模型还有多少想象力 作者 思杭 编辑 皮爷 出品 产业家 1亿用户 似乎是每个App都想踏过的 门槛 Ti
  • cadence的PCB封装库导入Altium designer

    目录 说明及作者联系方式 导入封装库说明 实例 导入cadence PCB文件 生成封装库 说明及作者联系方式 作者的软件是AD20 cadence是17 4 参考官方文档 官方文档原地址可点击此处跳转 作者还拥有个人公众号 会写一些感悟文
  • 静态链接与动态链接

    C代码编译生成可执行程序会经过如下过程 链接就是把目标文件与一些库文件生成可执行文件的一个过程 1 什么是静态链接 静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法 链接器是一个独立程序 将一个或多个库或目标文件 先前由编译器或