1.什么是静态连接库,什么是动态链接库
静态链接库用通俗的话讲,静态库就是将代码编译到一个二进制文件下(通常扩展名为.LIB).然后客户端调用程序,只需要包含相关的.h文件及LIB库文件一起链接到exe文件中.可执行程序发布后,不再需要该.lib文件了.
动态链接库最终将编译出.lib与.dll文件. 注意.lib文件与上面的静态库虽然扩展名相同,但有本质的区别.动态库中的lib文件是动态库的引入库. 该引入库包含被DLL导出的函数和变量的"符号名".而静态库中的.lib包含了函数和数据,动态库的函数和数据是编译到.dll中.动态链接库调用方式分为隐式调用与显示调用(也称静态调用与动态调用)。
2.动态链接库与静态链接库的使用时机
2.1用动态库的时机:
1)大系统,开发组多.减轻Build的负担。
2)不同语言版本的资源。数据/代码分离。
3)模块可以适应很多程序使用,而且程序可能安装到同一个系统中。比如IE与Outlook会共用很多Dll.
1)2)是工程管理的需要,3)是节省空间的需要。
但是Dll也会造成浪费,每个Dll的基本代码(例如内存管理等Cruntime)是相同的。所以如果库比较小,还是使用LIB比较好。
动态库的应用有两个主要原因:
1、共享。多个程序可以使用同一个动态库
2、开发模式好。要求设计者对功能划分得更好
但动态库装载的时候慢,特别是运行中装载有明显延迟。一旦装载完毕执行起来根静态库比较慢不了。
2.2静态库的优点:
代码装载速度快,执行速度略比动态库快。
3.动态链接库和静态链接库的使用
3.1对于动态链接库:
动态链接库的使用,根据不同的调用方法,需要提供不同的资源:
1. 静态加载------程序静态编译的时候就静态导入dll,这样的话就需要提供给库使用者(C客户)如下文件:*.lib文件和.dll文件和*.h。其有2个坏处:
1 程序一开始运行就需要载入整个dll,无法载入程序就不能开始运行;
2 由于载入的是整个dll,需要耗费资源较多
其调用方法如下:
#include"..\lib.h"
#pragma comment(lib,"..\\debug\\libTest.lib")
但是这种方式的话可以调用Classmethod.
2.动态加载-----那么只需要提供dll文件。
因此调用程序若想调用DLL中的某个函数就要以某种形式或方式指明它到底想调用哪一个函数。但是无法调用Classmethod了。
如果要调用Dll中的function,需要经历3个步骤:
Handle h=LoadLibrary(dllName) --> GetProcAddress(h,functionName) 返回函数指针,通过函指针调用其function-->FreeLibrary(h)
例如:Another.dll有一个intAdd(int x,int y)函数。则完整的调用过程如下:
typedef int (* FunPtr)(int,int);//定义函数指针
FunPtr funPtr;
Handle h=LoadLibrary("Another.dll");
funPtr=(FunPtr)GetProcAddress(h,"Add");
funPtr(2,3);//2+3;
FreeLibrary(h);
3.2对于静态链接库:
首先,静态链接库的使用需要库的开发者提供生成库的.h头文件和.lib文件。
生成库的.h头文件中的声明格式如下:
extern "C" 函数返回类型 函数名(参数表);
在调用程序的.cpp源代码文件中如下:
#include"..\lib.h"
#pragmacomment(lib,"..\\debug\\libTest.lib")
//指定与静态库一起链接
第二,因为静态链接库是将全部指令都包含入调用程序生成的EXE文件中。因此如果用的是静态链接库,那么也就不存在“导出某个函数提供给用户使用”的情况,要想用就得全要!要不就都别要!:)
分享到:
相关推荐
百度校招笔试题.doc
百度校招笔试题.docx百度校招笔试题.docx百度校招笔试题.docx百度校招笔试题.docx百度校招笔试题.docx百度校招笔试题.docx百度校招笔试题.docx百度校招笔试题.docx
美团校招笔试题,通过中序遍历和后序遍历求前序遍历(略) 2. 一个二进制序列,从右边第一个1开始连续
2016年腾讯校招笔试题(主观题2016年腾讯校招笔试题(主观题2016年腾讯校招笔试题(主观题2016年腾讯校招笔试题(主观题2016年腾讯校招笔试题(主观题2016年腾讯校招笔试题(主观题2016年腾讯校招笔试题(主观题2016...
2014中兴校招笔试题。
中兴2014校招软件笔试题,我的技术比较差,大家别介意
点我达2019校招笔试题-开发合集
中兴2015校招笔试题
2021紫光笔试题IC校招笔试题
七牛云2018校招笔试题七牛云2018校招笔试题七牛云2018校招笔试题
亚洲第一宽频通讯芯片组领导厂商-创发(联发科全资子公司) 创发科技的前身诚致科技成立于2001年,2003年推出全中国第一也是华人唯一的ADSL宽频通讯SOC芯片,整合了网络处理器平台、OFDM数字信号处理器与USB、Ethernet...
虹软2014校招笔试题
2015年,各大公司,如百度 阿里 腾讯 360 网易等的校招笔试题,也有部分往年的笔试题,不过很多只有题目,没有答案,请见谅!
宇视科技2016年校招笔试题,刚结束就整理出来了,求攒人品。
创新工场校招研发笔试题.pdf 小米校招技术类笔试题.pdf 届阿里巴巴校招测试开发工程师在线笔试题.pdf 年欢聚时代校园招聘C++笔试题目.pdf 年欢聚时代(YY)校园招聘Java笔试题目.pdf 网易校招JAVA开发工程师.pdf ...
2013绿盟科技校招笔试题,真题手打
IT互联网名企2014校招笔试题 看了,你就惊艳了
全新的中兴2015校招笔试题,希望对学弟学妹们有用,预祝大家找工作顺利
2013网易校园招聘笔试题,适用于c++开发,客户端开发,移动平台开发等
2013年10月13日,清华笔试,工作地点:深圳