首先,函数库就是一些事先写好的函数的集合,是别人分享的,我们可以拿来使用的。经过一些校准和整理,就形成一份标准化的函数库。例如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语言函数库:动态链接库与静态链接库相关推荐

  1. 什么是链接?(动态链接库和静态链接库的对比)

    什么是链接? 首先我们需要知道,一个源文件(以.c为例)是经过什么最后形成的一个可执行的文件(windows下为.exe文件). 一个.c的源文件,要经历 1.预处理:头文件的展开替换 2.编译:将对 ...

  2. Windows下动态链接库和静态链接库的生成以及调用

    Windows下静态库和动态库的生成和调用 一.简介 二.生成静态链接库(.lib)和动态链接库(.dll) 三.静态链接库的调用 四.动态链接库的调用 动态链接库的两种调用方式 仅使用.dll文件 ...

  3. 动态链接库与静态链接库

    动态链接库与静态链接库 首先纠正所谓"静态连接就是把需要的库函数放进你的exe之中"的说法.在真实世界中,有三个概念:Use   static   libary,   static ...

  4. c++动态链接库及静态链接库的生成与使用

    c++动态链接库及静态链接库的生成与使用 1,新建控制台工程xdltest,改属性-配置属性-常规-配置类型为 动态库.dll或静态库.lib 2,打开工程后添加 dltest.h, dltest.c ...

  5. linux 生成和使用动态链接库和静态链接库的Makefile编写

    引用 Jesse Rei 的 linux 生成和使用动态链接库和静态链接库的Makefile编写 生成和使用动态链接库和静态链接库的Makefile编写 1. 概述 介绍linux下生成和使用动态链接 ...

  6. windows 调用linux .a lib,动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a)...

    动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a) 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀.例如:libhello.so libhello ...

  7. 动态链接库和静态链接库的区别

    两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library. 一种是LIB包含函数 ...

  8. 关于动态链接库和静态链接库

    关于动态链接库和静态链接库 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二 ...

  9. Linux下Makefile中动态链接库和静态链接库的生成与调用

    背景:写这篇博客的原因是:最近在搞嵌入式,需要交叉编译opencv库文件,自己写Makefile,通过arm-linux-g++编译.链接.生成可执行文件,从而实现了移植的过程.平台是Toradex的 ...

最新文章

  1. Could not get unknown property ‘compileSdkVersion‘ for project
  2. 基于机器学习的web异常检测
  3. iPhone4 FaceTime 联通官方教程
  4. c语言数组方式实现静态循环队列
  5. Net5 已经来临,让我来送你一个成功
  6. jsoup解析HTML用法小结
  7. java几种遍历方式以及效率对比
  8. Linux Software RAID的rebuild速度。
  9. 九九乘法表--0702
  10. 基于visual Studio2013解决面试题之1102合并字符串
  11. 计算机四级网络工程师笔记
  12. 用友NC总账辅助余额表与应收应付模块余额表对账技巧
  13. python更改下载源地址
  14. 笔记本独立显卡geforce gtx 1050ti 388.71版本驱动
  15. 电信物联网平台插件开发相关总结
  16. 安装部署Ceph Calamari
  17. 数字 IC 技能拓展(1)Xilinx_Vivado_SDK_2019.1 安装详细教程
  18. C语言中文件打开模式(r/w/a/r+/w+/a+/rb/wb/ab/rb+/wb+/ab+)浅析
  19. iOS开发Storyboard中UITableView顶部默认空白 - 芒果iOS
  20. java 二进制位运算_Java中的二进制与位运算

热门文章

  1. 浪潮计算机组装过程,电脑组装步骤.doc
  2. MySQL 单表亿级数据查询优化,达到秒级响应
  3. [洛谷] P1498 南蛮图腾
  4. 信息统计面板 - SWING组件
  5. 关于系统蓝屏stop:c0000135 unknown hard Error unknow的解决
  6. U盘插入电脑不显示怎么办 U盘插入电脑不显示解决方法【详解】
  7. 讲体育教师资格证注意事项
  8. c语言奥林匹克大赛真题,全球首发!1-58届国际数学奥林匹克真题及解析大合集,350道必刷、必看、必收藏的巅峰之题与巧解妙解......
  9. 上传源文件至虚拟服务器,如何上传源代码到虚拟主机
  10. Linux驱动开发(三)---设备树