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

标签 c++ visual-studio opencv

我在 Visual Studio 2012 中有一个使用 opencv 动态库的项目。它编译、链接并运行良好。

我想更改项目,使其使用静态库而不是动态库。

我从

更改了项目 VC++ 目录中的库目录
  C:\thirdparty\opencv\build\x86\vc11\lib

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

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

 Error  110 error LNK2001: unresolved external symbol _TIFFWriteScanline    myproject\opencv_highgui245.lib(grfmt_tiff.obj) 

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

 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)    

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

编辑 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

我遇到了一些新错误:

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)    

显然缺少一些库,但是哪一个?

编辑 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

这解决了问题。

最佳答案

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

enter image description here

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

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

关于c++ - 在opencv中使用静态库而不是动态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16830842/

相关文章:

c++ - 可变参数宏中的模板推导失败

javascript - 如何在 visual studio 项目中查找关键字

visual-studio - 在公司机器上取消阻止DLL。怎么样?

visual-studio - Windows Azure 虚拟机上的 VisualSVN

python - OpenCV VideoCapture 以来自 GoPro 的视频结束

C++ 在使用指针时显示 vector

C++ 模板语法

c++ - 制作汇编器的设计模式

java - DMatch 类 Opencv

c++ - haar cascade for face detection xml文件代码讲解OpenCV