在opencv中使用静态库而不是动态库

man*_*ans 19 c++ opencv visual-studio

我在visual studio 2012中有一个使用opencv动态库的项目.它汇编,链接和运作良好.

我想更改项目,因此它使用静态库而不是动态库.

我更改了项目VC++目录中的库目录

  C:\thirdparty\opencv\build\x86\vc11\lib
Run Code Online (Sandbox Code Playgroud)

to:C:\ thirdparty\opencv\build\x86\vc11\staticlib

但是当我想构建项目时,我收到了很多链接器错误,例如:

 Error  110 error LNK2001: unresolved external symbol _TIFFWriteScanline    myproject\opencv_highgui245.lib(grfmt_tiff.obj) 
Run Code Online (Sandbox Code Playgroud)

更重要的是很多错误,例如:

 Error  1   error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in myproject.obj    myproject\opencv_core245.lib(system.obj)    
Run Code Online (Sandbox Code Playgroud)

我应该做哪些其他更改来转换使用动态库的项目来使用静态库?

编辑1

将/ md更改为/ mt并将一些新库添加到输入库列表后:

opencv_calib3d245.lib
opencv_contrib245.lib
opencv_core245.lib
opencv_features2d245.lib
opencv_flann245.lib
libtiff.lib
libpng.lib
libjpeg.lib
libjasper.lib
IlmImf.lib
zlib.lib
opencv_gpu245.lib
opencv_haartraining_engine.lib
opencv_highgui245.lib
opencv_imgproc245.lib
opencv_legacy245.lib
opencv_ml245.lib
opencv_nonfree245.lib
opencv_objdetect245.lib
opencv_photo245.lib
opencv_stitching245.lib
opencv_ts245.lib
opencv_video245.lib
opencv_videostab245.lib
Run Code Online (Sandbox Code Playgroud)

我收到一些新错误:

Error   9   error LNK2001: unresolved external symbol _AVIFileCreateStreamA@12  myproject\opencv_highgui245.lib(cap_vfw.obj)    
Error   8   error LNK2001: unresolved external symbol _AVIFileGetStream@16  myproject\opencv_highgui245.lib(cap_vfw.obj)    
Error   5   error LNK2001: unresolved external symbol _AVIFileInit@0    myproject\opencv_highgui245.lib(cap_vfw.obj)    
Error   7   error LNK2001: unresolved external symbol _AVIFileOpenA@16  myproject\opencv_highgui245.lib(cap_vfw.obj)    
Run Code Online (Sandbox Code Playgroud)

显然有些图书馆遗失了,但哪一个?

编辑2 需要添加更多库到列表.图书馆的完整清单如下:

opencv_calib3d245.lib
opencv_contrib245.lib
opencv_core245.lib
opencv_features2d245.lib
opencv_flann245.lib
libtiff.lib
libpng.lib
libjpeg.lib
libjasper.lib
IlmImf.lib
zlib.lib
opencv_gpu245.lib
opencv_haartraining_engine.lib
opencv_highgui245.lib
opencv_imgproc245.lib
opencv_legacy245.lib
opencv_ml245.lib
opencv_nonfree245.lib
opencv_objdetect245.lib
opencv_photo245.lib
opencv_stitching245.lib
opencv_ts245.lib
opencv_video245.lib
opencv_videostab245.lib
Vfw32.Lib
comctl32.lib
Run Code Online (Sandbox Code Playgroud)

这解决了这个问题.

Jas*_*ban 11

通过将项目的运行时库更改为/ MTd,我可以使VS 2013中的静态库工作

在此输入图像描述

然后包括这些链接器>>输入>>附加依赖项:

opencv_core248d.lib
opencv_imgproc248d.lib
opencv_highgui248d.lib
opencv_ml248d.lib
opencv_video248d.lib
opencv_features2d248d.lib
opencv_calib3d248d.lib
opencv_objdetect248d.lib
opencv_contrib248d.lib
opencv_legacy248d.lib
opencv_flann248d.lib
libpngd.lib
libtiffd.lib
zlibd.lib
IlmImfd.lib
libjasperd.lib
libjpegd.lib
comctl32.lib
gdi32.lib
vfw32.lib
Run Code Online (Sandbox Code Playgroud)


G H*_*ley 7

如果你正在使用CMake进行构建,那么它非常简单,因为它是OpenCV CMake选项之一; 只需将BUILD_WITH_STATIC_CRT设置为关闭.例如.在CMake命令行上

-DBUILD_WITH_STATIC_CRT=OFF
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你,兄弟.现在,让我们再次编译......:打哈欠: (3认同)