在opencv中使用静态库而不是动态库 [英] using static libraries instead of dynamic libraries in opencv

查看:2976
本文介绍了在opencv中使用静态库而不是动态库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在visual studio 2012中有一个项目,它使用opencv动态库。它编译,链接并运行良好。



我想改变的项目,所以它使用静态库,而不是动态库。



我改变了项目的VC ++目录库目录从

  C:\thirdparty\opencv\build\\ \\ x86 \vc11\lib 

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



但是当我要构建的项目,我得到了很多链接错误如:

 错误110错误LNK2001:无法解析的外部符号_TIFFWriteScanline myproject\opencv_highgui245.lib(grfmt_tiff.obj)

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

 错误1错误LNK2038:对于RuntimeLibrary'检测不匹配:在myproject.obj myproject\opencv_core245.lib值'MT_StaticRelease'不匹配值'MD_DynamicRelease'(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



我收到一些新错误:

 错误9错误LNK2001:解析外部符号_AVIFileCreateStreamA @ 12 myproject\opencv_highgui245.lib(cap_vfw.obj)
错误8错误LNK2001:解析外部符号_AVIFileGetStream @ 16 myproject\opencv_highgui245.lib(cap_vfw.obj)
错误5错误LNK2001:解析外部符号_AVIFileInit @ 0 myproject\opencv_highgui245.lib(cap_vfw.obj)
错误7错误LNK2001:解析外部符号_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

这解决了问题。


解决方案

我能够获得静态库在VS 2013年该项目的运行时库更改为/ MTD工作



>



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

  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


I have a project in visual studio 2012 which uses opencv dynamic libraries. It compiled, linked and worked well.

I want to change the project so it uses static libraries instead of dynamic libraries.

I changed the library directories in project VC++ directory from

  C:\thirdparty\opencv\build\x86\vc11\lib

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

but when I want to build the project, I am getting a lot of linker error such as:

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

and more importantly a lot of error such as this:

 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)    

What other changes should I do to convert a project which uses dynamic libraries to use static libraries?

Edit 1

After change /md to /mt and adding some new libraries to the list of input libraries:

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

I am getting some new errors:

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)    

Apparently some library is missing, but which one?

Edit 2 need to add more library to list. Full list of library is as follow:

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

This solved the problem.

解决方案

I am able to get the static libraries working in VS 2013 by changing the project's Runtime Library to /MTd

and then including these Linker >> Input >> Additional Dependencies:

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

这篇关于在opencv中使用静态库而不是动态库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆