首页 > 代码库 > 介绍静态链接库和动态链接库的区别,及在VC++6.0中的建立和使用
介绍静态链接库和动态链接库的区别,及在VC++6.0中的建立和使用
首先介绍一下链接库:链接库分为动态链接库和静态链接库两种
LIB是静态链接库,在程序编译连接的时候是静态链接,其对应的文件格式是.lib。即当程序采用静态链接库的时候,.lib文件中的函数被链接到最终的可执行文件中,因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。
DLL是动态链接库,在程序运行的时候被调用,其对应的文件的格式是.dll。即当程序采用动态链接的时候,.dll文件中的函数并没有被链接到可执行文件中,可执行文件只是保存了函数的地址信息。但是动态库必须和应用程序一起发布。
下面讲解一下动态库和静态库在VC6.0中的使用方法
先来讲解静态库的创建和使用方法
首先建立一个Win32 Console Static Library工程名字为Max_Func。
在工程中添加名字为Max_Func.h的头文件。
代码如下:
int max(int a,int b);
在工程中添加名字为Max_Func.cpp的源文件。
代码如下:
#include <iostream.h>
#include "Max_Func.h" //声明定义max函数
#include "Macro_Define.h"//下面的三个头文件随后定义
#include "Global_Value.h"
#include "Extern_Value.h"
int max(int a,int b)
{
cout<<"COPYRIGHT"<<endl;
++GLOBAL_NUM;
cout<<"Call Max_Func "<<GLOBAL_NUM<<endl;
return a>b?a:b;
}
在工程中添加头文件Macro_Define.h
代码如下:
#define COPYRIGHT "Scripted by WP."
在工程中添加头文件Global_Value.h
代码如下:
int GLOBAL_NUM = 0;
在工程中添加头文件Extern_Value.h
代码如下:
extern int GLOBAL_NUM;
编译上述的工程文件得到Max_Func.lib文件。
对外开发的文件为Max_Func.lib和Max_Func.h.如果是项目合作开发的话Macro_Define.h,Global_Value.h,Extern_Value.h文件是共有的。
怎样添加到工程中呢?下面介绍几种方法。并用某一种方法展示一下.
第一种添加方法是#pragma comment(lib,"D:\\MFC\\Test_Project_4\\lib\\Max_Func.lib")来添加。
其中"D:\\MFC\\Test_Project_4\\lib\\Max_Func.lib"为Max_Func.lib文件的绝对路径。当然也可以用相对路径。
然后在你使用.lib中函数的文件中添加#include "Macro_Define.h"即可。
第二种方法是直接将Max_Func.lib文件添加到要使用的工程中。即在工程上选择Add Files to Project.....来完成。
然后在你使用.lib中函数的文件中添加#include "Macro_Define.h"即可。
第三种方法是VC6.0中的Tools/Options的Library Files 添加.lib文件的查找路径。并且在Project/Setting的Link标签的
object/library modules 中添加静态库的名字。
然后在你使用.lib中函数的文件中添加#include "Macro_Define.h"即可。
下面的程序利用的是第一种方法
#include <iostream.h>
#include "Macro_Define.h"
#include "Extern_Value.h"
#include "Max_Func.h"
#pragma comment(lib,"D:\\MFC\\Test_Project_4\\lib\\Max_Func.lib")//加入静态库
void main(void)
{
cout<<COPYRIGHT<<endl;
cout<<max(19,49)<<endl;
cout<<max(200,100)<<endl;
}
上面的过程即可调用静态库中的函数了。
有什么不明白的可以在下面留言。
下面讲解动态库的创建和使用方法
创建一个动态链接库的工程名字为Max_Func
在工程中添加名字为Max_Func.h的头文件。
代码如下:
int max(int a,int b);
在工程中添加名字为Max_Func.cpp的源文件。
代码如下:
#include <iostream.h>
#include "Max_Func.h" //声明定义max函数
#include "Macro_Define.h"//下面的三个头文件随后定义
#include "Global_Value.h"
#include "Extern_Value.h"
int max(int a,int b)
{
cout<<"COPYRIGHT"<<endl;
++GLOBAL_NUM;
cout<<"Call Max_Func "<<GLOBAL_NUM<<endl;
return a>b?a:b;
}
在工程中添加头文件Macro_Define.h
代码如下:
#define COPYRIGHT "Scripted by WP."
在工程中添加头文件Global_Value.h
代码如下:
int GLOBAL_NUM = 0;
在工程中添加头文件Extern_Value.h
代码如下:
extern int GLOBAL_NUM;
上述的代码编译生成文件Max_Func.dll下面还需要生成一个导出DLL的文件的Max_Func.lib文件。
需要建立Max_Func.def加入工程
内容如下:
LIBRARY Max_Func_1//说明要导出的动态库名字
EXPORTS max //导出的函数
DLL文件的加入方式和LIB的几乎一样,因为都是将格式为lib的文件加入到工程。需要注意的是需要将DLL文件加入到工程目录下或者能够搜索到的地方。在程序的运行过程将dll文件中的函数进行调用。工程通过函数的地址在dll中找到
要调用的函数。