注意:1、在生成动态库时,需添加导出函数_delcspce(dllexport),一般紧跟包含文件后,才有生成含有lib的动态库;2、链接库有显示和隐形调用等方法;3、include后用得符号,符号<>标准库搜索,符号“”先搜索当前文件路径,若未找到该文件,就搜索标准库路径。
两种库:
• 包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。
• 包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。
共有两种链接方式:
• 动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅包含在运行时定位DLL函数的可执行代码所需的信息。
• 静态链接使用静态链接库,链接器从静态链接库LIB获取所有被引用函数,并将库同代码一起放到可执行文件中。
--------------------------------------------------------------------------------
两种文件的区别
--------------------------------------------------------------------------------
使用lib需注意两个文件:
•.h头文件,包含lib中说明输出的类或符号原型或数据结构。应用程序调用lib时,需要将该文件包含入应用程序的源文件中。
•.LIB文件。
使用dll需注意三个文件:
•.h头文件,包含dll中说明输出的类或符号原型或数据结构的.h文件。应用程序调用dll时,需要将该文件包含入应用程序的源文件中。
•.LIB文件,是dll在编译、链接成功之后生成的文件,作用是当其他应用程序调用dll时,需要将该文件引入应用程序,否则产生错误(如果不想用lib文件或者没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress装载)。
•dll文件,真正的可执行文件,开发成功后的应用程序在发布时,只需要有.exe文件和.dll文件,并不需要.lib文件和.h头文件。
动态库:
包含.dll、.lib、.h三个文件,动态链接库是一个可执行的模块,不能单独运行,需要应用程序调用才能使用,通常封装了函数的集合,仅在程序运行的时候才去查。.lib文件提供调用函数的位置信息,.dll是原函数代码,使用的时候必须包含以上三个文件。
静态库:
包含.lib、.h文件,了、连接器从静态库LIB中获取被引用的函数,并将代码一起放到可执行文件中,使用时将以上两个文件考入当前文件的lib文件夹中。
二、生成静态可动态库
文件——新建——项目——控制台程序
下一步中选择DLL后完成
完成后新建一个.h和.cpp文件,
LibTest内容和LibTest.cpp内容
完成后按F7进行编译在文件件中出现.dll文件。静态库编译同上
如果遇到如下问题
将进行如下嵌入清单改成是即可
二、完成生成后进行验证
新建一个testlib项目
#include "stdafx.h"
#include "LibTest.h"
#include "iostream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
CTest dt;
int res=dt.sum(1,2);
cout<<"res:"<<res<<endl;
system("pause");
return 0;
}
然后进行属性设置连接将LibTest.lib写入
如果是静态连接需考入.lib、.h文件到当前程序文件夹lib文件夹中,若动态连接则需要考入.dll、.lib、.h三个文件到lib中,编译即可
网址:http://blog.csdn.net/liuhuashui123/article/details/46799715
http://www.cnblogs.com/lishennan/p/5053115.html