VS如何设置OpenCV静态编译

可以使用opencv提供的静态链接库也可以自己编译静态链接库.

1 使用opencv提供的静态链接库,位置如下图.

首先设置VS配置.有如下几个配置

1 工具->选项->项目和解决方案->VC++目录->包含目录.配置图中的OpenCV243那3项.

2工具->选项->项目和解决方案->VC++目录->库文件

3 项目属性->配置属性->链接器->输入->附加依赖项.把lib库全部加入.

加入完是这个样子

这里之所以要全部加如而没有用哪个再加入哪个是由于全加入比较方便.属于傻瓜配置.可以复制下面的.

这是debug的

IlmImfd.lib

libjasperd.lib

libjpegd.lib

libpngd.lib

libtiffd.lib

opencv_calib3d243d.lib

opencv_contrib243d.lib

opencv_core243d.lib

opencv_features2d243d.lib

opencv_flann243d.lib

opencv_gpu243d.lib

opencv_highgui243d.lib

opencv_imgproc243d.lib

opencv_legacy243d.lib

opencv_ml243d.lib

opencv_nonfree243d.lib

opencv_objdetect243d.lib

opencv_photo243d.lib

opencv_stitching243d.lib

opencv_ts243d.lib

opencv_video243d.lib

opencv_videostab243d.lib

zlibd.lib

这是release的

IlmImf.lib

libjasper.lib

libjpeg.lib

libpng.lib

libtiff.lib

opencv_calib3d243.lib

opencv_contrib243.lib

opencv_core243.lib

opencv_features2d243.lib

opencv_flann243.lib

opencv_gpu243.lib

opencv_highgui243.lib

opencv_imgproc243.lib

opencv_legacy243.lib

opencv_ml243.lib

opencv_nonfree243.lib

opencv_objdetect243.lib

opencv_photo243.lib

opencv_stitching243.lib

opencv_ts243.lib

opencv_video243.lib

opencv_videostab243.lib

zlib.lib

Dbghelp.lib

我在设置工程中遇到了下面几个问题

问题1如下

解决方法: 项目属性->配置属性->常规->MFC的使用. 设置为 “使用标准Windows库”.

这个是因为静态库这个设置应该和你的项目设置一致.

问题2.提示下面的warning

这个warning 我采用 ##pragma warning(disable : 4996) ,但是去不掉.不知道为什么.当然你不能debug进入opencv源码中. 所以后来我采用了下一种方法.

问题3: 提示找不到一些库.如下图

解决方法: 增加代码 #pragma comment( lib, "vfw32.lib" ) 和 #pragma comment( lib, "comctl32.lib" )

2 自己编译静态链接库.编译完是下图的样子.

工具: cmake-gui.exe

具体方法我参考了这个博文http://blog.163.com/yuyang_tech/blog/static/21605008320147271503664/.

同样还有图.

要注意去掉BUILD_SHARED_LIBS.这样生成的才是静态库.

工程设置只有下图一点不同,库文件路径变了.注意要增加3rdparty库这个路径.





------------------------------------------------------------------------------------------------------------------------
错误(一): 错误症状: >opencv_core310.lib(matrix.obj) : error LNK2001: 无法解析的外部符号 _ippicvsSortDescend_8u_I@8
....有二三十个 _ipp开头的错误,ok,这个我知道了,肯定是cmake配置的WITH_IPP没有取消,于是乎在cmake配置里把WITH_IPP取消,再编译生成静态库,可是还是有错误,只剩下几个了,离成功又近了一步,hoho..
------------------------------------------------------------------------------------------------------------------------

错误(二): 错误症状:  error LNK2001: 无法解析的外部符号 "class cv::Mat __cdecl cv::imread(class cv::String const &,int)"  
晕,imread怎么会木有,我明明已经加了#pragma comment( lib, "opencv_highgui310.lib" ) ,莫非opencv3.x以后highgui模块里木有imread了,查看了OpenCV.sln里的opencv_highgui_object项目里的highgui相关的源代码,我靠在highgui.hpp果然找不到imread,后来瞄了一眼,发现有个opencv_imgcodecs项目,好吧,imread它就安详地躲在那里面,然后把opencv_imgcodecs310.lib加进去(#pragma comment( lib, "opencv_imgcodecs310.lib" ) )...
------------------------------------------------------------------------------------------------------------------------

然后再一编译我的项目,imread是ok了,可是又有一堆新的错误神器地诞生了....


错误(三):错误症状: ,无法解析的外部符号 _WebPGetFeaturesInternal...
 无法解析的外部符号 "public: class Imf::Header const & __thiscall Imf::InputFile::header(void)const " (?header@InputFile@Imf@@QBEABVHeader@2@XZ)..
 把cmake配置的WITH_WEBP,WITH_OPENEXR选项去掉了,再N次成静态库,ok,总算我的项目编译成功,能显示图片了..done..


你可能感兴趣的:(Window编程)