利用VS生成.lib及.dll文件
2017-09-20 18:00
211 查看
利用VS生成.lib及.dll文
.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文件一同打包发布。
相关文章推荐
- C++ / vs 如何生成自己的静态库(lib)文件
- vs2013生成lib和dll库文件
- 【Visual Studio】使用 pexports 根据 VS 的 .dll 动态链接库生成 .lib 库文件
- 在vs中用C的编程方式生成.dll文件并且动态、静态调用dll中的函数
- VS2013 中生成lib和dll库文件
- (Unity)Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进展混淆,避免被反编译
- vs2010生成和使用.dll,.lib和.exe文件
- win10系统中ASP.NET(VS2013)和MATLAB混编,调用MATLAB生成的.dll文件
- 利用批处理实现一键搞定SVN更新、CMake生成工程文件、VS打开sln、开文件夹的偷懒目的
- windows 10(64位)下实现vs20120C++调用matlab r2014a编写的m文件生成的.dll,.lib,.h文件
- VS2013 中生成lib和dll库文件
- Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进行混淆,避免被反编译。
- C++ / vs 如何生成自己的静态库(lib)文件
- asp.net 利用VS将CS类文件生成DLL文件
- 在vs中用C++编程的方式生成.dll文件和以动态、静态调用dll中函数
- VS2013生成lib和.dll并使用
- VS项目中调用他人提供的.lib和.dll文件的用法(绝对路径和相对路径)
- 利用预生成事件来拷贝log4net的配置文件
- 关于VS编译时出现无法打开libcmrt.lib,libc.lib等系统常见库文件的解决办法
- 如何利用Android XmlSerializer生成XML文件