关于lib和dll的区别如下
- lib是编译时用到的,dll是运行时用到的。如果要完成源代码的编译,只需要lib;如果要使动态链接的程序运行起来,只需要dll。
- 如果有dll文件,那么lib一般是一些索引信息,记录了dll中函数的入口和位置,dll中是函数的具体内容;如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。使用静态编译的lib文件,在运行程序时不需要再挂动态库,缺点是导致应用程序比较大,而且失去了动态库的灵活性,发布新版本时要发布新的应用程序才行。
- 动态链接的情况下,有两个文件:一个是LIB文件,一个是DLL文件。LIB包含被DLL导出的函数名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到DLL文件。在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中相应函数代码的地址,从而节省了内存资源。DLL和LIB文件必须随应用程序一起发行,否则应用程序会产生错误。如果不想用lib文件或者没有lib文件,可以用WIN32
API函数LoadLibrary、GetProcAddress装载。
编写一个DLL文件
要选择正确的工程,类似DLL工程。
环境:Visual Studio 2012
且最好是这样:
DLL.h
//#define DLL_EXPORTS
//DLL_EXPORTS为DLL文件特有宏,以便调用。
//如果有IDE的话可以在工程设置里添加
//DLL_API是自取名称
#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
extern int DLL_API num;
int DLL_API func_add(int,int);
class DLL_API MyClass
{
//TO DO
private:
public:
};
//TO DO
DLL.cpp
#include "DLL.h" //DLL.h Path
int DLL_API num = 100; //Init num
int DLL_API func_add(int a, int b)
{
return a + b;
}
main.cpp
#include "DLL.h"
//添加依赖文件在IDE里
//#include ...
int main()
{
std::cout << func_add(num,num) << std::endl;
return 0;
}
本文为在 Visual Studio下写成。至于无IDE情况请另寻他门。宇宙第一 IDE