C语言函数库:动态链接库与静态链接库
首先,函数库就是一些事先写好的函数的集合,是别人分享的,我们可以拿来使用的。经过一些校准和整理,就形成一份标准化的函数库。例如glibc
函数库有两种提供形式:动态链接库与静态链接库
早起函数库里的函数都是直接共享的,就是所谓的开源社区。后来函数库商业化,就出现了静态链接库与动态链接库。
他们是不直接给客户提供源代码,静态链接库是先将源代码只编译不连接形成.o文件,再用tar工具将.o文件归档成.a文件(即静态链接库文件),商业公司通过提供.a文件库和.h头文件给客户使用。客户在使用的时候,通过文件描述得知函数原型,在自己的.c文件中直接调用这些库文件,然后在连接器连接的时候去.a文件库里取出那个函数对应的.o文件,从而生成可执行程序。
动态链接库相比静态链接库效率更高,假设多个程序都使用了某个函数库,那么静态链接库在连接生成可执行程序的时候就要重复占有内存,而动态链接库则不需要库函数的代码段连接到可执行程序中,只是做个标记,等着运行过程中发现调用了一个动态库里的库函数,就会去加载这个动态库到内存中去,不会重复加载。
下面介绍一下,如何在vs2019中使用自定义动态链接库(c语言)
建立动态库
1.建立一个动态库项目
建立名称为DLL3的动态链接库项目
项目建立完成后出现下面的项目结构
其中pch.h声明用的头文件,具体函数代码在pch.cpp文件中。dllmain.cpp和framework.h文件分别为动态链接库的入口和默认加载头文件,可以不用管。直接使用自动生成的代码即可。
2.首先是在pch.h的头文件中声明要加入的函数
extern "C" _declspec(dllexport) int Add(int a, int b);
extern "C" _declspec(dllexport) int Sub(int a, int b);
————————————————
3.在pch.cpp中加入函数代码int Add(int a, int b)
{return a + b;
}int Sub(int a, int b)
{return a - b;
}
4.编译动态链接库项目,会提示[无法启动程序],在输出框有下面的结果
到这里,动态链接DLL库已经生产。其中最主要的是DLL3.lib和DLL3.dll这两个文件。lib是资源描述文件,dll是动态库,函数二进制码集合,里面有函数的函数体,动态库是有规范的。通过lib可以找到对应的dll文件,只要把他们放入到对应的文件夹中。
接下来就要介绍动态链接库的使用了。
(1) 在上面生成项目的目录有dll和lib两个生成好的文件。
(2) 新建一个c的控制台应用程序UseDLL3_1,把DLL3.dll放入Debug目录下。
(3) 把DLL3.lib放入到UseDLL3_1文件夹下
(4) 在UseDLL3_1项目中新建一个源文件main.c,代码如下:
#include<stdio.h>#pragma comment(lib,"DLL3.lib")int Add(int a, int b);
int Sub(int a, int b);int main() {printf("调用动态dll add函数的结果:%d\n", Add(5, 6));printf("调用动态dll sub函数的结果:%d\n", Sub(5, 6));getchar();return 0;
}
(5) 运行输出结果:
C语言函数库:动态链接库与静态链接库相关推荐
- 什么是链接?(动态链接库和静态链接库的对比)
什么是链接? 首先我们需要知道,一个源文件(以.c为例)是经过什么最后形成的一个可执行的文件(windows下为.exe文件). 一个.c的源文件,要经历 1.预处理:头文件的展开替换 2.编译:将对 ...
- Windows下动态链接库和静态链接库的生成以及调用
Windows下静态库和动态库的生成和调用 一.简介 二.生成静态链接库(.lib)和动态链接库(.dll) 三.静态链接库的调用 四.动态链接库的调用 动态链接库的两种调用方式 仅使用.dll文件 ...
- 动态链接库与静态链接库
动态链接库与静态链接库 首先纠正所谓"静态连接就是把需要的库函数放进你的exe之中"的说法.在真实世界中,有三个概念:Use static libary, static ...
- c++动态链接库及静态链接库的生成与使用
c++动态链接库及静态链接库的生成与使用 1,新建控制台工程xdltest,改属性-配置属性-常规-配置类型为 动态库.dll或静态库.lib 2,打开工程后添加 dltest.h, dltest.c ...
- linux 生成和使用动态链接库和静态链接库的Makefile编写
引用 Jesse Rei 的 linux 生成和使用动态链接库和静态链接库的Makefile编写 生成和使用动态链接库和静态链接库的Makefile编写 1. 概述 介绍linux下生成和使用动态链接 ...
- windows 调用linux .a lib,动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a)...
动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a) 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀.例如:libhello.so libhello ...
- 动态链接库和静态链接库的区别
两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library. 一种是LIB包含函数 ...
- 关于动态链接库和静态链接库
关于动态链接库和静态链接库 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二 ...
- Linux下Makefile中动态链接库和静态链接库的生成与调用
背景:写这篇博客的原因是:最近在搞嵌入式,需要交叉编译opencv库文件,自己写Makefile,通过arm-linux-g++编译.链接.生成可执行文件,从而实现了移植的过程.平台是Toradex的 ...
最新文章
- Could not get unknown property ‘compileSdkVersion‘ for project
- 基于机器学习的web异常检测
- iPhone4 FaceTime 联通官方教程
- c语言数组方式实现静态循环队列
- Net5 已经来临,让我来送你一个成功
- jsoup解析HTML用法小结
- java几种遍历方式以及效率对比
- Linux Software RAID的rebuild速度。
- 九九乘法表--0702
- 基于visual Studio2013解决面试题之1102合并字符串
- 计算机四级网络工程师笔记
- 用友NC总账辅助余额表与应收应付模块余额表对账技巧
- python更改下载源地址
- 笔记本独立显卡geforce gtx 1050ti 388.71版本驱动
- 电信物联网平台插件开发相关总结
- 安装部署Ceph Calamari
- 数字 IC 技能拓展(1)Xilinx_Vivado_SDK_2019.1 安装详细教程
- C语言中文件打开模式(r/w/a/r+/w+/a+/rb/wb/ab/rb+/wb+/ab+)浅析
- iOS开发Storyboard中UITableView顶部默认空白 - 芒果iOS
- java 二进制位运算_Java中的二进制与位运算
热门文章
- 浪潮计算机组装过程,电脑组装步骤.doc
- MySQL 单表亿级数据查询优化,达到秒级响应
- [洛谷] P1498 南蛮图腾
- 信息统计面板 - SWING组件
- 关于系统蓝屏stop:c0000135 unknown hard Error unknow的解决
- U盘插入电脑不显示怎么办 U盘插入电脑不显示解决方法【详解】
- 讲体育教师资格证注意事项
- c语言奥林匹克大赛真题,全球首发!1-58届国际数学奥林匹克真题及解析大合集,350道必刷、必看、必收藏的巅峰之题与巧解妙解......
- 上传源文件至虚拟服务器,如何上传源代码到虚拟主机
- Linux驱动开发(三)---设备树