静态库
vs创建静态库
- 新建头文件,添加需要的函数的声明
- 新建步骤一中头文件对应的
.c
文件,实现头文件中声明的函数 - 设置项目的配置类型为“静态库(.lib)”,然后生成即可
使用静态库
在链接阶段,会把静态库中完全复制到程序中,一旦链接完成,静态库便不需要了,可直接删除,程序照常执行。
方式一
- 静态库对应的头文件复制到项目目录下
- 右键项目,依次选择“添加”->“现有项”,找到生成的
.lib
,添加进来 - 编写测试程序,包含静态库头文件,使用其声明的函数即可
方式二
- 打开项目属性
- “配置属性”->“C/C++”->“常规”->“附加包含目录”,添加静态库对应头文件所在目录
- “配置属性”->“链接器”->“常规”->“附加库目录”,添加静态库所在目录
- “配置属性”->“链接器”->“输入”->“附加依赖项”,添加需要使用的静态库名
- 编写测试程序,包含静态库头文件,使用其声明的函数即可
动态库
相关概念
导入/导出函数
导入函数只能在当前项目中使用,导出函数可在项目外部使用。在函数声明前加上__declspec (dllexport)
,使之成为导出函数,在实现该函数时,可不必再加上__declspec (dllexport)
vs创建动态库
- 新建头文件,添加导出函数的声明。注意:若动态库头文件中声明了非导出函数,那么通过动态库使用非导出函数会报错
- 新建步骤一中头文件对应的
.c
文件,实现头文件中声明的函数 - 设置项目的配置类型为“动态库(.dll)”,然后生成即可
补充:
.h
头文件、.lib
库文件 、.dll
动态链接库文件之间的关系
-
.h
头文件是编译时必须的,.lib
是链接时需要的,.dll
是运行时需要的。附加依赖项添加的是.lib
而不是.dll
,若生成了.dll
,则肯定也生成了.lib
文件。 -
.h
文件的作用:声明函数接口 -
.dll
文件作用:函数可执行代码 -
.lib
文件作用:当我们在自己的程序中引用了一个.h
文件里的函数,链接器怎么知道该调用哪个.dll
文件呢?这就是.lib
文件的作用了。它告诉链接器调用的函数在哪个.dll
中,函数执行代码在.dll
中的什么位置,这也就是为什么需要附加依赖项.lib
文件,它起到桥梁的作用。 -
如果是生成静态库文件,则没有
.dll
,只有.lib
,这时函数可执行代码部分也在.lib
文件中。
使用动态库
注意:.dll
必须在程序运行时的可以访问的目录下,否则会报找不到xxx.dll
。 一般放在.exe
所在目录
方式一
- 动态库对应的头文件复制到项目目录下
- 右键项目,依次选择“添加”->“现有项”,找到生成的
.lib
和.dll
,添加进来 - 编写测试程序,包含动态库头文件,使用其声明的函数即可
方式二
- 动态库对应的头文件复制到项目目录下
- 编写测试程序,包含动态库头文件
- 需要使用的文件中加入
#pragma comment(lib, "E:/project/VSProjects/Algorithm/Debug/CommonModule.lib")
方式三
- 打开项目属性
- “配置属性”->“C/C++”->“常规”->“附加包含目录”,添加动态库对应头文件所在目录
- “配置属性”->“链接器”->“常规”->“附加库目录”,添加与动态库一起生成的
.lib
文件所在目录 - “配置属性”->“链接器”->“输入”->“附加依赖项”,添加与动态库一起生成的
.lib
文件名 - 编写测试程序,包含静态库头文件,使用其声明的函数即可