在opencv中使用静态库而不是动态库 [英] using static libraries instead of dynamic libraries in 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屋!