1. 无本地依赖的解释及其必要性
1.1 什么叫无本地依赖
在Windows系统中,对于常用的开源库,我们通常都喜欢将其编译成DLL。然后保存在某个目录下,最后将该目录添加到 Path 环境变量来达到在本机上对该DLL引用的一劳永逸的方法。这种方法对于学术人员做实验分析来说确实是一种比较方便的做法,但是如果是做一个可移植的系统的话,这种方式就很不靠谱!因为,这个程序只能在你的系统上运行,当将其移植到别的系统上的话除非另外一台机器与你的Windows在相同的目录下安装了该库,并且将该目录添加到系统的path环境变量中,程序才能正确的运行。否则运行程序后就会产生异常,提示缺失相关的Lib和DLL文件:
因此,我们做一个可移植的系统软件时,需要将所有依赖的第三方库包含到程序本身的目录下面使得该程序不需要依赖任何系统去安装程序需要的DLL就可以直接把我们编写好的程序拷过去安装执行就可以了。这就是我所定义的无本地依赖。
1.2 Windows系统查找DLL的方式
Windows系统大致按照如下的顺序查找程序所依赖的DLL:
- 应用程序所在目录;
- 系统目录。GetSystemDirectory返回的目录,通常是系统盘\Windows\System32;
- Windows目录。GetWindowsDirectory返回的目录,通常是系统盘\Windows;
- 当前目录。GetCurrentDirectory返回的目录;
- 环境变量PATH中所有目录。
因此,我们的方式是将程序所有依赖的所有的头文件、lib和DLL都包含在工程目录下,采用相对目录的方式进行查找。
2. 详细的配置步骤
首先,创建一个Visual C++ Win32 Console应用程序,然后将所需要的opencv的头文件、lib文件以及DLL文件放置在解决方案的根目录下。假设该文件夹名为OpenCV,下图为该目录下的文件夹结构:
2.1 添加头文件引用
首先解决方案资源管理器右击该工程名,如下图所示,进入工程的属性页。这里主要是设置编译器进行编译前后所需要的参数和相关的资源的查找路径用的设置。
未完待续。。。