静态库创建和使用
创建
-
打开vs2017点击创建新项目,选择静态库; -
在StaticLib.cpp文件下写实现,再创建一个对应的头文件写声明:


- 项目->生成 即可在输出文件夹下得到对应的lib文件:

使用
新建一个项目,点击属性,配置三条款项:
- VC++目录的包含目录和库目录分别加入lib对应头文件的位置和lib文件的位置;
- 链接器->输入 添加lib文件的名字;
 
在需要的项目文件中添加lib对应的头文件,之后使用函数即可:

易错点
- 配置项目属性时一定要看好自己运行的环境是Debug还是Release,是X86还是X64,配置一定要对应(例如配置的是Debug的属性结果Release没配置还去生成Release版本);
- lib文件创建在x86还是x64那么使用这个lib时项目也只能运行在对应的版本上!否则会报LINK2019:

动态库创建和使用
创建
- 新建项目->具有导出项的动态链接库(不然可能不会生成lib文件,lib是指向dll的桥梁):

-
创建好该项目后,会发现有一个与项目名称相同的h文件和cpp文件,里面写好了基本的代码,只需要在其基础上模仿添加自己的业务代码即可(注意无论是函数还是变量都要有DLL3_API这个宏,表示导出项):  -
在cpp文件中实现自己的业务函数:  -
生成代码(注意之后使用dll和生成dll所在的平台要一致,x86或x64) -
生成完毕后会在对应文件夹(e.g. DEBUG)下找到dll文件和lib文件:

使用
- 创建一个新项目;
- VC++目录的包含目录和库目录分别加入lib对应头文件的位置和lib文件的位置;
- 链接器->输入 添加lib文件的名字;
- 将dll文件复制到项目DEBUG文件夹下或者Release文件下(exe在哪就放哪);

- 编译项目即可;
前三步和使用静态库是一致的,可以理解为动态库是通过这个静态导入库导入的(该导入库仅包含 DLL 文件中存储的函数信息,无具体实现);
注意
如果不想每一次都拷贝dll文件到对应exe路径下,在vs中可以这样设置:
项目->属性->调试->环境
输入 path=dll文件的路径

DLL的好处
DLL文件中的函数可以被多个程序共用。因此,借助该功能可以节约内存和磁盘。此外,在对函数的内容进行修正时,还不需要重新链接(静态链接)使用这个函数的程序。
Others
lib一般需要h文件提供api;dll一般需要lib导入库+对应的h文件提供接口。
|