.lib文件与.dll文件
.lib文件称作静态链接库,.dll文件称作动态链接库。linux系统下对应的文件为.a文件及.so文件。
Windows平台下c++程序与库的链接有两种方式:静态链接与动态链接。
- 静态链接只需要.lib文件,此时.lib文件作为静态链接库。打包好的程序只有.exe文件,文件体积较大。
- 动态链接需要.lib及.dll文件,此时.dll文件作为动态链接库,而.lib文件作为库的入口,被打包到.exe文件中。此时打包好的程序包括.exe文件及.dll文件。
比较这两种方式,显然动态链接更灵活。如果发布的程序需要更新库里的内容,只需要更新对应的dll文件即可,而对其他文件不需要做修改。相反静态链接方式需要更新整个.exe程序,而且会使得.exe文件体积庞大。
如何利用VS2013生成.lib及.dll文件
这里以VS2013为例,生成动态链接库。首先创建一个DLL工程:
添加源文件及头文件:
头文件里定义DLL_API函数(即调用者可以从外部调用的函数):
#ifdef DLL_API
#else
#define DLL_API __declspec(dllexport)
#endif
// 这里以加法为例,其中DLL_API代表可供调用者调用的函数
DLL_API int add(int a, int b);
源文件里实现这个add函数:
#include "dll_test.h"
int add(int a, int b)
{
return a + b;
}
好,现在可以右键工程生成一下,我们可以在Debug文件夹里看到如下文件:
其中.lib文件及.dll文件就是我们打包好的库文件。如果其他工程要调用这个库,需要做的是:
- 工程包含dll_test.h头文件;
- 工程包含.lib链接库,作为动态链接库的入口;
- 将.dll文件与生成的.exe文件放在同一目录下,或者将.dll文件所在目录添加到系统环境变量中并重启计算机。
几点注意
- 上面的例子只生成了Debug版本的库文件,如需Release版本,需要重新在Release模式下生成一次。
- 默认的工程依赖VS环境,如果在没有VS环境机器上不能直接运行。解决办法是工程右键-属性-C/C++-代码生成-运行库,改为/MT(Release)或者/MTd(Debug)
- 如果生成的库依赖其他动态链接库,需要把依赖的.dll文件一同打包发布。