@H_301_2@ 转载来自:http://blog.csdn.net/zengraoli/article/details/71178349
@H_301_2@ 谢谢博主.
@H_301_2@
https://sourceforge.NET/projects/opencvlibrary/files/OpenCV-win/3.2.0/opencv-3.2.0-vc14.exe/download
从官网直接下载得到的opencv-3.2.0-vc14.exe,在安装之后,可以在文件夹中看到其所使用的opencv_world320d.dll以及opencv_world320.dll都是依赖vs2015的
这样就会导致,所生成出来的exe还需要外带一个140.DLL
从下面开始,就来重新编译opencv3.2,生成一个不依赖vs2015并且区分工程的dll
首先需要用到的是cmake
@H_301_2@ 从这里下载http://download.csdn.net/detail/zengraoli/9814295
@H_301_2@ 得到cmake,解压后打开里面的cmake-gui.exe
@H_301_2@
@H_301_2@ @H_301_2@ 在gui中配置opencv
@H_301_2@ @H_301_2@ 在1处填入上面释放出来的opencv源文件路径(下的文件夹sources) @H_301_2@ 在2出填入生成出来的vs工程路径 @H_301_2@ 接下来选择configure
@H_301_2@ 会让我们选择生成解决方案的工具版本
@H_301_2@ @H_301_2@ 在gui中配置opencv
@H_301_2@ @H_301_2@ 在1处填入上面释放出来的opencv源文件路径(下的文件夹sources) @H_301_2@ 在2出填入生成出来的vs工程路径 @H_301_2@ 接下来选择configure
@H_301_2@ 会让我们选择生成解决方案的工具版本
finish之后,进度条走完,可以看到配置所对应的name和value(在里面可以修改需要到的配置,比如可以去掉cuda的钩)
在vs2015中进行配置(主要针对release版本)
@H_301_2@ 在属性页中,修改其运行库为/MT
@H_301_2@
@H_301_2@ @H_301_2@ 统一生成一次解决方案,会出现下面的错误 @H_301_2@ 3>cap.obj :error LNK2019: 无法解析的外部符号 "void __cdecl `eh vector destructoriterator'(void *,unsigned __int64,void (__cdecl*)(void*))" (??_M@YAXPEAX_K1P6AX0@Z@Z),该符号在函数 "public: virtual void * __cdeclcv::VideoCapture::`vector deleting destructor'(unsigned int)"(??_EVideoCapture@cv@@UEAAPEAXI@Z) 中被引用 @H_301_2@ 3>cap_mjpeg_encoder.obj: error LNK2001: 无法解析的外部符号 "void __cdecl `eh vector destructoriterator'(void *,void (__cdecl*)(void*))" (??_M@YAXPEAX_K1P6AX0@Z@Z) @H_301_2@ 3>opencv_videoio_pch.obj: error LNK2001: 无法解析的外部符号 "void __cdecl `eh vector destructoriterator'(void *,void (__cdecl*)(void*))" (??_M@YAXPEAX_K1P6AX0@Z@Z) @H_301_2@ 3>opencv_videoio_pch.obj: error LNK2001: 无法解析的外部符号 _purecall @H_301_2@ 3>cap.obj :error LNK2001: 无法解析的外部符号 _purecall @H_301_2@ 3>cap_mjpeg_encoder.obj: error LNK2001: 无法解析的外部符号 _purecall @H_301_2@ 3>cap_mjpeg_decoder.obj: error LNK2001: 无法解析的外部符号 _purecall @H_301_2@ 3>cap_dshow.obj: error LNK2001: 无法解析的外部符号 _purecall @H_301_2@ 3>cap_dshow.obj: error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" (??2@YAPEAX_K@Z) @H_301_2@ 3>cap_vfw.obj :error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" (??2@YAPEAX_K@Z) @H_301_2@ 3>cap_ffmpeg.obj: error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" (??2@YAPEAX_K@Z) @H_301_2@ 3>opencv_videoio_pch.obj: error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" (??2@YAPEAX_K@Z) @H_301_2@ 3>cap.obj :error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" (??2@YAPEAX_K@Z) @H_301_2@ 3>cap_images.obj: error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" (??2@YAPEAX_K@Z) @H_301_2@ 3>cap_mjpeg_encoder.obj: error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" (??2@YAPEAX_K@Z)
@H_301_2@ @H_301_2@ 得到两个生成不正确的dll
@H_301_2@ @H_301_2@ 这两个分别是opencv_highgui320.dll和opencv_videoio320.lib @H_301_2@ 找到这两个工程,在属性页中的
@H_301_2@ 忽略库都给去掉 @H_301_2@ 再次编译
@H_301_2@ @H_301_2@ 统一生成一次解决方案,会出现下面的错误 @H_301_2@ 3>cap.obj :error LNK2019: 无法解析的外部符号 "void __cdecl `eh vector destructoriterator'(void *,unsigned __int64,void (__cdecl*)(void*))" (??_M@YAXPEAX_K1P6AX0@Z@Z),该符号在函数 "public: virtual void * __cdeclcv::VideoCapture::`vector deleting destructor'(unsigned int)"(??_EVideoCapture@cv@@UEAAPEAXI@Z) 中被引用 @H_301_2@ 3>cap_mjpeg_encoder.obj: error LNK2001: 无法解析的外部符号 "void __cdecl `eh vector destructoriterator'(void *,void (__cdecl*)(void*))" (??_M@YAXPEAX_K1P6AX0@Z@Z) @H_301_2@ 3>opencv_videoio_pch.obj: error LNK2001: 无法解析的外部符号 "void __cdecl `eh vector destructoriterator'(void *,void (__cdecl*)(void*))" (??_M@YAXPEAX_K1P6AX0@Z@Z) @H_301_2@ 3>opencv_videoio_pch.obj: error LNK2001: 无法解析的外部符号 _purecall @H_301_2@ 3>cap.obj :error LNK2001: 无法解析的外部符号 _purecall @H_301_2@ 3>cap_mjpeg_encoder.obj: error LNK2001: 无法解析的外部符号 _purecall @H_301_2@ 3>cap_mjpeg_decoder.obj: error LNK2001: 无法解析的外部符号 _purecall @H_301_2@ 3>cap_dshow.obj: error LNK2001: 无法解析的外部符号 _purecall @H_301_2@ 3>cap_dshow.obj: error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" (??2@YAPEAX_K@Z) @H_301_2@ 3>cap_vfw.obj :error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" (??2@YAPEAX_K@Z) @H_301_2@ 3>cap_ffmpeg.obj: error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" (??2@YAPEAX_K@Z) @H_301_2@ 3>opencv_videoio_pch.obj: error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" (??2@YAPEAX_K@Z) @H_301_2@ 3>cap.obj :error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" (??2@YAPEAX_K@Z) @H_301_2@ 3>cap_images.obj: error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" (??2@YAPEAX_K@Z) @H_301_2@ 3>cap_mjpeg_encoder.obj: error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" (??2@YAPEAX_K@Z)
@H_301_2@ @H_301_2@ 得到两个生成不正确的dll
@H_301_2@ @H_301_2@ 这两个分别是opencv_highgui320.dll和opencv_videoio320.lib @H_301_2@ 找到这两个工程,在属性页中的
@H_301_2@ 忽略库都给去掉 @H_301_2@ 再次编译