Windows Visual Studio中静态库与动态库加载
VS项目中的包含目录
、库目录
、附加包含目录
、附加库目录
、附加依赖项
在项目->属性->配置属性下进行配置,具体说明如下:
1 静态库加载
1.1 VC++目录
包含目录
:即语句#include<xxxx.h>
中的头文件xxxx.h
的搜索目录库目录
:即.lib文件
的搜索目录
1.2 C/C++:
常规->附加包含目录
:即语句#include<xxxx.h>
中的头文件xxxx.h
的搜索目录(多项之间用分号;
分割)
1.3 链接器:
常规->附加库目录
:寻找.lib文件
的搜索目录输入->附加依赖项
:lib库文件名
(Tips: C++的库一般会把函数、类等声明放在*.h头文件中,具体函数、类等实现放在*.cpp或*.cc中。编译之后,.cpp,.cc,*.c会被打包成一个.lib文件,这样可以保护源代码)
1.4 配置区别
-
包含目录
vs附加包含目录
、库目录
vs附加库目录
的区别包含目录
:修改了系统的include宏的值,是全局的;附加包含目录
:用于当前项目,对其他项目没有影响。
注意:库目录
和附加库目录
的区别同上; -
包含目录
vs附加包含目录
、库目录
vs附加库目录
的区别主要在于全局还是仅针对当前工程;若仅需要对某工程进行配置,则在附加包含目录
和附加库目录
中添加即可。
注意:要使用一个库,除了要include其头文件以外(附加包含目录
),还要在链接过程中把lib加进去,即需要配置附加库目录
、附加依赖项
(库文件名)。
1.5 某工程具体配置方法
为了提高程序的可移植性,通常会将第三库放在解决方案(.sln)或者工程(.vcxproj)文件所在的文件夹下;添加目录的时候添加相对目录,这样在其他电脑上运行时就不会出现配置的问题了。
注意:相对路径
是针对工程文件(*.vcxproj)
而言的。
附加包含目录
—添加工程的头文件目录:
项目->属性->配置属性->C/C++ ->常规->附加包含目录:加上头文件的存放目录;附加库目录
—添加文件引用的lib静态库路径:
项目->属性->配置属性->链接器->常规->附加库目录:加上lib文件的存放目录;附加依赖项
—添加工程引用的lib文件名:
项目->属性->配置属性->链接器->输入->附加依赖项:加上lib文件名。
附加依赖项
也可直接给带有路径(相对路径
或绝对路径
)的lib文件
,此时无需配置附加库目录
!
2 动态库加载
与静态库不同,动态库的加载有2种方式,分为隐式加载
和显示加载
。
2.1 隐式加载
所需文件:接口.h头文件
,dll文件
,lib文件
。.h文件
和.lib文件
的加载方式与静态库加载完全一致。但.dll文件
必须放在环境变量指定的目录下,通常是与目标.exe文件
放在同一目录下。
2.2 显示加载
所需文件:.h文件
、dll文件
。理论上不需要.h头文件
,但是前提是明确知道函数接口。
利用LoadLibrary()函数
进行加载、利用FreeLibrary()函数
进行卸载。如图2 动态库显式加载与卸载范例
2.3 两种加载方式区别
- 显示加载使用灵活,需要时加载,用完卸载;
- 隐式加载伴随着整个程序的生命周期。
总结
库分为静态库
和动态库
。
静态库
与可执行文件.exe
打包,动态库
与可执行文件.exe
独立。静态库
加载需要:.lib文件
、.h文件
;动态库隐式加载
需要.dll文件
、.h文件
、.lib文件
;动态库显示加载
只需要.dll文件
。