静态链接库和动态链接库

来源:互联网 发布:清华大学软件学院课程 编辑:程序博客网 时间:2024/05/18 18:03

 一、静态链接库和动态链接库的相同点和区别

1.同点:

静态链接库和动态链接库都实现了代码的共享;
2.区别:

 静态链接库——lib中的代码被包含在调用的exe文件中,该lib中不能再包含其他动态链接库或者静态链接库;
动态链接库——dll可以被调用的exe动态的“引用”和“卸载”,dll中可以包含其他动态链接库或者静态链接库;


二、静态链接库的建立和使用

1、静态链接库的创建:在头文件(.h)中声明可以被调用的函数,变量等,在实现文件(.cpp)中完成函数功能等;
2、静态链接库的使用:在调用的文件中用#include"静态链接库的头文件",#pragma comment(lib,"静态链接库")//表示该文件的.obj与该静态链接库一起链接;


三、动态链接库的建立和使用

动态链接库和静态链接库的创建和使用的区别在库的外部接口定义及调用方式。
1、动态链接库的创建:

声明导出函数:第一种方法是在函数声明前加_declspec(dllexport) ;第二种方法是在该dll 中建立一个文本文件同时命名为***.def。
.def的格式为:LIBRARY 动态链接库的名字
EXPORTS 导出函数名(假如是变量,应该为:变量名 DATA或者变量名 CONSTANT )
其余和静态链接库类似,即在实现文件中完成功能;
2、动态链接库调用:

有两种方式,一种是动态调用,一种是静态调用;
动态调用特点——完全由编程者用API动态加载和卸载DLL,程序员决定何时加载,加载哪一个DLL;
静态调用特点——由编译程序完成DLL的加载和应用程序结束后DLL的卸载,若应用程序结束了,则windows对该DLL的应用计数-1,如果应用计数不为0,则直到使用该 DLL的所有应用程序都结束后再卸载;


静态调用过程——告诉编译器与DLL对应的.lib(程序员在建立dll时,连接器会自动生成一个lib,该文件包含dll导出的函数名及其符号,在应用程序里.lib代替dll参与编译)所在的路径及文件名,通过 #pragma comment(lib"****.lib")完成;
声明导入函数,通过_declspec(dllexport)函数声明完成;
动态调用过程——通过调用API函数LoadLibrary()GetProcAddress()FreeLibrary()完成.

原创粉丝点击