静态链接库LIB和动态链接库DLL的区别,创建和示例  
1.什么是静态连接库,什么是动态链接库
  静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。
静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。
(若是想在MFC应用程序中调用动态链接库DLL,或静态链接库LIB,又或者是动态链接库DLL中要调用静态链接库LIB的接口,建议在编译链接时,所有模块(exe,dll,lib)要么都是MFC作为共享的DLL,要么都MFC作为静态链接库,或者都用标准的Windows库,总之可执行程序和DLL或LIB中的调用应保持一致。)
 
 
静态链接库与静态链接库调用规则总体比较如下:  
对于静态链接库(比较简单):
首先,静态链接库的使用需要库的开发者提供生成库的.h头文件和.lib文件。

生成库的.h头文件中的声明格式如下:
extern "C" 函数返回类型 函数名(参数表);
在调用程序的.cpp源代码文件中如下:
#include "..\lib.h"
#pragma comment(lib,"..\\debug\\libTest.lib")  
//指定与静态库一起链接

第二,因为静态链接库是将全部指令都包含入调用程序生成的EXE文件中。因此如果用的是静态链接库,那么也就不存在“导出某个函数提供给用户使用”的情况,要想用就得全要!要不就都别要!:)

对于动态链接库:
动态链接库的使用需要库的开发者提供生成的.lib文件和.dll文件。或者只提供dll文件。
首先我们必须先注意到DLL内的函数分为两种:  
(1)DLL 导出函数,可供应用程序调用;  
(2)DLL 内部函数,只能在 DLL 程序使用,应用程序无法调用它们。
因此调用程序若想调用DLL中的某个函数就要以某种形式或方式指明它到底想调用哪一个函数

而对于一个工程模块,我们可以将其编译成动态链接库DLL的文件形式,也可以编译成静态链接库LIB的文件。

若想条件编译的话,可以定义一个标识然后编译的时候设置这个标识一起编译。

[cpp] view plaincopy print?
  1. #define   _AFXDLL
  2. #ifndef  _AFXDLL
  3. #pragma commit( lib, "我的静态库.lib");
  4. #else
  5. #pragma commit( lib, "我的动态库.lib");
  6. #endif

若是有需要,想将原来以动态链接库DLL编译的模块,转换成静态链接库LIB的形式,只需要将工程里编译选项改成以静态库方式编译就行。同时修改下DLL中的导出函数的声明为普通函数声明。

同时注意,应用程序中调用静态链接库.lib时,只需要隐式的(即工程配置项里或用#pragma comment)引入.lib文件,因为静态链接库的lib就是其本身,所以这样我们就能直接调用静态链接库里的接口了。【他跟动态链接库DLL在开发角度上,不同的是,DLL需要引入的是链接文件.lib,让编译器能找到DLL中的接口,其他在使用上都一样】

在这提醒下,

静态链接库文件.lib与动态链接库DLL编译时产生的.lib链接文件是不一样的,即便它们在Windows中呈现的文件格式是一样的,动态链接文件.lib里面仅仅只是保存了一些动态链接导出函数的声明,有心的朋友,可以比较下它们的大小,你会发现,动态链接文件.lib跟静态链接库文件.lib比起来小很多。

MFC模块的动态链接库DLL以及静态链接库LIB编译后的调用相关推荐

  1. 动态链接库dll,静态链接库lib, 导入库lib 转

    动态链接库dll,静态链接库lib, 导入库lib 在用VS编译工程的时候,我们会选择动态链接库dll,静态链接库lib(static library),可是为什么在编译动态链接库的时候也可以指定输出 ...

  2. 动态链接库dll,静态链接库lib, 导入库lib

    目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称"静态库"),另一种为动态连接库(DLL,以下简称"动态库")的导入库(Imp ...

  3. C++动态链接库dll及静态链接库lib制作及使用教程

    现需将C++函数封装成动态链接库dll,网上看了好多博客教程,说的都不够全面,现提供一个很有用的视频,亲测有效,启发很大,附上链接: 视频网址 下面自己根据视频记录下制作动态链接库dll过程,防止忘记 ...

  4. 动态链接库DLL与静态链接库LIB

    1)DLL 作用: 1.有助于促进代码重用和内存的效率使用 2.让程序模块化,有利于程序的维护 2.)DLL两种链接方法 1.隐式链接 把.dll和.lib文件导入到项目路径中去 #include&q ...

  5. VS2017 静态链接库(.lib)的制作和调用,并对环境配置进行试验

    VS2017 静态链接库(.lib)的制作和调用,并对环境配置进行试验 首先说一下本人测试的结论: 生成静态链接库时将环境设置为 Debug x64,创建空项目时,将环境设置为Debug x64,运行 ...

  6. Python3源码编译和使用静态链接库lib动态链接库dll详细介绍

    说明: 本文主要介绍: 1.python3源码的下载和编译内核工程(pythoncore) 2.编译的lib和dll使用例子. 若需要编译源码PCBuild下其他python工程,类似参考内核工程(p ...

  7. 静态链接库(Lib)和动态链接库(DLL)

    序言:本文主要讲解静态链接库和动态链接库的区别,以及怎么样编译和引用两种库,怎么样从DLL中导出函数和导出C++类. 一.静态链接库和动态链接库 1.静态链接库(.LIB):函数和数据被编译进一个二进 ...

  8. lib库反编译C语言,C语言静态链接库(lib)与动态链接库(dll)

    今天看到了之前的笔记,看到之前写的笔记,感觉自己都不认得了~~一.静态链接库(lib) 首先创建    "在VC6中创建项目:Win32 Static Library" 在项目中创 ...

  9. 静态链接库(Lib) 与 动态链接库(DLL)

    静态链接库(Lib) 与 动态链接库(DLL) 一.VS中添加LIb库及头文件(外部依赖项)的步骤: 1.添加工程的头文件目录:工程-属性-配置属性-c/c+±–常规-附加包含目录:加上头文件存放目录 ...

最新文章

  1. Java实现自动生成Mysql数据库表实体类
  2. 希尔排序(shellsort)算法实现
  3. asp:HyperLink vs asp:LinkButton
  4. ML之ME/LF:基于不同机器学习框架(sklearn/TF)下算法的模型评估指标(损失函数)代码实现及其函数(Scoring/metrics)代码实现(仅代码)
  5. 【MM模块】Document Release 订单下达(审批)
  6. wxWidgets随笔(4)-hello,world
  7. postman设置带token的请求
  8. 百度贴吧——因百度账号策略调整导致长时间未登录的账号(最后登录在2017年6月1日以前)网页端无法登陆、移动端异常解决方案
  9. vue中实现美团双级联动菜单
  10. .Net Core WebApi(三)在Linux服务器上部署
  11. 利用linux curl爬取网站数据
  12. winform文件迁移工具
  13. ActiveXObject ADODB.Stream封装
  14. CAD2016软件安装教程
  15. 秒懂---LDA算法
  16. 问卷调查页面的设计与实现
  17. Fabric开发(三) Ubuntu20.04.1快速搭建Fabric1.4.3 (排雷版)
  18. 定时打开指定程序软件
  19. 照片被删除了?内存卡照片恢复这么做
  20. 【微信小程序】上传头像

热门文章

  1. boost::hash_range相关的测试程序
  2. boost::random模块使用多精度类型测试所有与整数相关的生成器和分布的测试程序
  3. boost::hana::is_nothing用法的测试程序
  4. boost::hana::make_tuple用法的测试程序
  5. boost::gil::view_type用法的测试程序
  6. Boost:使用/type <>语法测试成员函数
  7. VTK:Filtering之GenericClip
  8. OpenCV使用G-API实现面部美化算法
  9. Qt Creator查看输出
  10. 「Jupyter」ubuntu下安装jupyterlab后jupyterlab:未找到命令