转载来自:http://blog.csdn.net/zengraoli/article/details/71178349

谢谢博主.


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的

opencv3.2生成不依赖vs2015的dll

这样就会导致,所生成出来的exe还需要外带一个140.DLL

从下面开始,就来重新编译opencv3.2,生成一个不依赖vs2015并且区分工程的dll


首先需要用到的是cmake

从这里下载http://download.csdn.net/detail/zengraoli/9814295

得到cmake,解压后打开里面的cmake-gui.exe

opencv3.2生成不依赖vs2015的dll

在gui中配置opencv

opencv3.2生成不依赖vs2015的dll

在1处填入上面释放出来的opencv源文件路径(下的文件夹sources)

在2出填入生成出来的vs工程路径

接下来选择configure

opencv3.2生成不依赖vs2015的dll

会让我们选择生成解决方案的工具版本

opencv3.2生成不依赖vs2015的dll

finish之后,进度条走完,可以看到配置所对应的name和value(在里面可以修改需要到的配置,比如可以去掉cuda的钩)
opencv3.2生成不依赖vs2015的dll

注意改变这里的选项

a、修改需要不依赖vs的设置

opencv3.2生成不依赖vs2015的dll

b、修改只生成一个dll的设置(会比较大,可选,这里先去掉)

opencv3.2生成不依赖vs2015的dll

接下来是最后一个,选择generate

opencv3.2生成不依赖vs2015的dll

完成之后,就可以在目录D:\opencv2015看到vs的opencv工程了

opencv3.2生成不依赖vs2015的dll

用vs2015打开这个工程


在vs2015中进行配置(主要针对release版本)

对这几个项目

opencv3.2生成不依赖vs2015的dll

在属性页中,修改其运行库为/MT

opencv3.2生成不依赖vs2015的dll

统一生成一次解决方案,会出现下面的错误

3>cap.obj :error LNK2019: 无法解析的外部符号 "void __cdecl `eh vector destructoriterator'(void *,unsigned __int64,unsigned __int64,void (__cdecl*)(void*))" ([email protected][email protected]@Z),该符号在函数 "public: virtual void * __cdeclcv::VideoCapture::`vector deleting destructor'(unsigned int)"([email protected]@@[email protected]) 中被引用

3>cap_mjpeg_encoder.obj: error LNK2001: 无法解析的外部符号 "void __cdecl `eh vector destructoriterator'(void *,unsigned __int64,unsigned __int64,void (__cdecl*)(void*))" ([email protected][email protected]@Z)

3>opencv_videoio_pch.obj: error LNK2001: 无法解析的外部符号 "void __cdecl `eh vector destructoriterator'(void *,unsigned __int64,unsigned __int64,void (__cdecl*)(void*))" ([email protected][email protected]@Z)

3>opencv_videoio_pch.obj: error LNK2001: 无法解析的外部符号 _purecall

3>cap.obj :error LNK2001: 无法解析的外部符号 _purecall

3>cap_mjpeg_encoder.obj: error LNK2001: 无法解析的外部符号 _purecall

3>cap_mjpeg_decoder.obj: error LNK2001: 无法解析的外部符号 _purecall

3>cap_dshow.obj: error LNK2001: 无法解析的外部符号 _purecall

3>cap_dshow.obj: error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" ([email protected][email protected])

3>cap_vfw.obj :error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" ([email protected][email protected])

3>cap_ffmpeg.obj: error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" ([email protected][email protected])

3>opencv_videoio_pch.obj: error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" ([email protected][email protected])

3>cap.obj :error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" ([email protected][email protected])

3>cap_images.obj: error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" ([email protected][email protected])

3>cap_mjpeg_encoder.obj: error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned__int64)" ([email protected][email protected])


得到两个生成不正确的dll

opencv3.2生成不依赖vs2015的dll

这两个分别是opencv_highgui320.dll和opencv_videoio320.lib

找到这两个工程,在属性页中的

opencv3.2生成不依赖vs2015的dll

忽略库都给去掉

再次编译

opencv3.2生成不依赖vs2015的dll


查看生成的dll

在目录D:\opencv2015\bin\Release中找到生成的dll文件

opencv3.2生成不依赖vs2015的dll

可以看到是多个dll的,跟从官网解压出来的单个还是有区别的

在depends.exe中可以看到这些dll已经不依赖vs2015了

opencv3.2生成不依赖vs2015的dll

相关文章:

  • 2022-12-23
  • 2022-01-09
  • 2020-03-02
  • 2021-10-29
  • 2021-12-18
  • 2020-01-31
  • 2021-08-19
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-12-14
  • 2022-12-23
  • 2021-08-14
  • 2021-08-06
  • 2022-12-23
  • 2021-05-07
相关资源
相似解决方案