利用VS生成.lib及.dll文件

2015年05月05日

.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文件就是我们打包好的库文件。如果其他工程要调用这个库,需要做的是:

  1. 工程包含dll_test.h头文件;
  2. 工程包含.lib链接库,作为动态链接库的入口;
  3. 将.dll文件与生成的.exe文件放在同一目录下,或者将.dll文件所在目录添加到系统环境变量中并重启计算机。

几点注意

  • 上面的例子只生成了Debug版本的库文件,如需Release版本,需要重新在Release模式下生成一次。
  • 默认的工程依赖VS环境,如果在没有VS环境机器上不能直接运行。解决办法是工程右键-属性-C/C++-代码生成-运行库,改为/MT(Release)或者/MTd(Debug)
  • 如果生成的库依赖其他动态链接库,需要把依赖的.dll文件一同打包发布。