在
静脉现象仪项目中需要用到
OpenCV,刚开始使用了OpenCV的
动态链接库,这样,在移动可执行程序时还必须将OpenCV动态支持库一起搬移,很是麻烦。所以,最终选择OpenCV
静态链接库,这样程序移植运行就方便了很多。
需要
编译成静态库以便于
应用程序链接。
网上有的教程中写的在VC++2010下安装OpenCV2.1时用到了
TBB库,而我在编译链接自己的程序后需要用到TBB.dll。本人设计的目的就是要做一个独立的界面程序,不需要携带其他第三方库。经过一段时间的努力最终找到了编译
OpenCV2.1静态库的方法。
需要的工具环境及文件:
-------------------------------------------------------------------------------------------------------------
1、Windows XP
2、VC++2010(VS2010)
3、为编译OpenCV源码包(我下载的有:
OpenCV2.1.0,
OpenCV2.3.0及
OpenCV2.4.4)
4、CMake2.8.9
--------------------------------------------------------------------------------------------------------------
以OpenCV2.1.0编译静态库为例
CMake配置
-------------------------------------------------------------------------------------------------------------
打开CMake并设置:
Where is the rource code :OpenCV源代码所在的文件夹
Where to build the binaries:
CMake配置好得到的文件放在位置(我的:
E:\OpenCV2.1.0-prj
)
然后点击
configure,选择
"
Visual Studio 10
"。然后确定。
等待configure完成,会出现很多红色的选项,因为主要是生成OpenCV的库,所以只需保留某些选项:
去掉BUILD_NEW_PYTHON_SUPPORT,BUILD_SHARED_LIBS, BUILD_TESTS
勾选OPENCV_BUILD_3RDPARTY_LIBS, WITH_TBB,WITH_JASPER, WITH_JPEG, WITH_PNG, WITH_TIFF选项,
然后再点击
configure,如下图:
![OpenCV - 编译静态OpenCV库(静态库) - dingmz_frc - dingmz_frc的博客](http://img0.ph.126.net/9q7OV46qtq60dIYKRuIRRw==/6597618422959620783.jpg)
提示TBB_INCLUDE_DIR找不到,因为我们
不需要TBB库,所以忽略,再一次点击
configure。
等待配置完成,最后点击
generate,完成后关闭
CMake。
-------------------------------------------------------------------------------------------------------------
VC++2010编译静态库
-------------------------------------------------------------------------------------------------------------
进入E:\OpenCV2.1.0-prj目录,使用VC++2010打开
.sln文件,打开
项目管理器
这时候会看到
解决方案中有很多小项目存在。
注:
这时我们右键任意点击一个子项目(如cv),选择属性,可以在配置属性下的常规项目中看到,配置类型为 静态库(lib)。
按住ctrl键,选中除过
ALL_BUILD,
INSTALL,
ZERO_CHECK,
uninstall四个项目的其他所有项目,在菜单中选择
项目->
属性,打开
配置属性->
c/c++->
代码生成选项,在右侧窗口中的
运行时库中选择
多线程调试(/MTd),然后确认。
![OpenCV - 编译静态OpenCV库(静态库) - dingmz_frc - dingmz_frc的博客](http://img0.ph.126.net/w3SrgzqTJzS_qj4Ckei1AA==/6597343545053783067.jpg)
说明:这里有四个选项(/MT, /MTd, /MD, /MDd),前两个一组,为静态链接运行时库,运行时不需要运行时库的支持,代码直接插入到程序中去;后两个一组,为动态链接运行时库,运行时需要msvcr90.dll或msvcp90.dll支持。
我们先编译
Debug版的OpenCV静态库,在
解决方案"opencv"(22个项目)上单击右键,选择
重新生成解决方案,此时便开始编译OpenCV库了,等编译结束会提示完成
16个,失败4个:
![OpenCV - 编译静态OpenCV库(静态库) - dingmz_frc - dingmz_frc的博客](http://img0.ph.126.net/Jt5HahBqk_I6SeJzsqZLLw==/6597763558494500292.jpg)
然后我们用相同的方式生成
Release版的库,在
之前的基础上只需要将
选项选择多线程
/MT,再进行编译。编译时警告很多,直接忽略!
注意:
/MT即是Release版本,/MTD即是Debug版本。
最终我们需要的静态库就存在:
E:\OpenCV2.1.0-prj/lib 和
E:\OpenCV2.1.0-prj/3rdparty/lib 两个目录,我们编译好的库就在这两个文件夹下。分别
将
E:\OpenCV2.1.0-prj/3rdparty/lib中Debug 下面的所有文件Copy到
E:\OpenCV2.1.0-prj/lib中的Debug 文件中。
将
E:\OpenCV2.1.0-prj/3rdparty/lib中Release下面的所有文件Copy到
E:\OpenCV2.1.0-prj/
lib中的Release文件中。
-------------------------------------------------------------------------------------------------------------
至此,我们的库编译完成了,现在要做的就是编写好自己的类,然后链接到下面这些库,下次就可以直接和自己写的库进行链接,而不再依赖OpenCV库了。要链接的库包括:cv210d.lib cxcore210d.lib highgui210d.lib zlibd.lib flannd.lib libjasperd.lib libjpegd.lib libpngd.lib libtiffd.lib opencv_lapackd.lib vfw32.lib videoinput.lib。
至于OpenCV2.3.0与OpenCV2.4.4版本的静态库编译完全可参考OpenCV2.1.0方法进行!
OpenCV2.3所需的lib(
”
解决方案属性->连接器->输入->附加依赖项“中加入)
vfw32.lib
libjasper.lib
libjpeg.lib
libpng.lib
libtiff.lib
zlib.lib
opencv_core230.lib
opencv_highgui230.lib
opencv_video230.lib
opencv_ml230.lib
opencv_legacy230.lib
opencv_imgproc230.lib
要包含的Head files
D:\Program Files\OpenCV-2.3.0\include\opencv2
D:\Program Files\OpenCV-2.3.0\modules\highgui\include
D:\Program Files\OpenCV-2.3.0\modules\flann\include
...
OpenCV2.4与之大同小异!