原创 静态和动态链接库的使用

2013-12-14 16:50 1199 20 20 分类: 软件与OS

最近要开发一个小的MFC的测试程序,需要使用动态链接库,在这里把关于静态和动态链接库的生成和使用方法总结如下:

1.静态链接库

生成:用VC++的工程向导建立一个Win32 Static Library,勾选Precompiled header和MFC support(可以不勾选),新建相应的.h和.cpp文件,在.cpp文件当中编写需要定义的函数,在.h当中正常声明,编译生成.lib文件即可,如果勾选了Precompiled header,则需要在.cpp文件当中包含#include "StdAfx.h"。

在生成静态库时,经常容易出现类似如下错误:

fatal error C1010: unexpected end of file while looking for precompiled header directive

问题一般发生在:通过添加文件的方式,添加了一些cpp文件到一个MFC的程序,但该cpp文件并不是MFC,而是标准的C++。 
解决方案1: 右键单击项目工程中的cpp文件,在菜单Project->Settings->C/C++->Precompile Header,设置为第一项:Not using precompile headers。
解决方案2:在.cpp文件开头添加包含文件stdafx.h。 #include"stdafx.h"

使用静态链接库:将生成库的.h和.lib两个文件文件拷贝到要使用的工程目录下,将库的.h文件添加到工程目录下,并且在要使用库的cpp文件里面包含库的.h文件,在工程设置里面设置.lib文件的路径:link--general--object/library modules,填写相应的库的lib的名称,以.lib结尾,也可以将库的.lib文件直接通过Add to projects添加到工程当中,就不需要设置路径了。

2.动态链接库

生成:用VC++的工程向导建立一个Win32 Dynamic-Link Library,新建.h和cpp文件,需要注意的是在.h文件的函数声明之前处需要在函数名前使用如下的声明:extern "C" _declspec(dllexport) int Add(int a,int b);不这样声明则无法生成lib文件。
动态链接库和静态链接库的一大区别是DLL的函数实现在DLL文件中,lib文件只是一个存放函数入口地址的库,静态链接库将函数的实现直接放在lib里面。
另外,当需要在DLL中使用类以及导出类时,在声明类时在类名前使用_declspec(dllexport)即可,如class _declspec(dllexport) CMath  如果只想导出成员函数,在相应的函数定义前声明即可。这样在使用时可以直接定义类的对象,使用所有类成员和函数。
 
使用:将.h,.lib,.dll文件拷贝到要使用的工程目录下,在cpp文件里面包含.h并将.h添加到工程,如上设置.lib的路径即可直接在cpp文件当中将dll定义的函数当做全局函数使用。
 
 
 
 
 
 
 
 

文章评论0条评论)

登录后参与讨论
我要评论
0
20
关闭 站长推荐上一条 /2 下一条