Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio LNK2005将静态openCV库与Visual Studio和QT Creator链接时出错_Visual Studio_Qt_Opencv_Linker_Lnk2005 - Fatal编程技术网

Visual studio LNK2005将静态openCV库与Visual Studio和QT Creator链接时出错

Visual studio LNK2005将静态openCV库与Visual Studio和QT Creator链接时出错,visual-studio,qt,opencv,linker,lnk2005,Visual Studio,Qt,Opencv,Linker,Lnk2005,我构建了静态openCV 2.3库。我的项目目前使用动态库,没有问题,但现在我想使用静态库。我已将LIB添加到.pro文件中: LIBS += "C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_calib3d231.lib" \ "C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_contrib231.lib" \ "C:\Prog

我构建了静态openCV 2.3库。我的项目目前使用动态库,没有问题,但现在我想使用静态库。我已将LIB添加到.pro文件中:

LIBS += "C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_calib3d231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_contrib231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_core231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_features2d231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_flann231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_gpu231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_haartraining_engine.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_highgui231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_imgproc231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_legacy231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_ml231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_objdetect231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_ts231.lib" \
"C:\Program Files\openCV_VS_static\opencv\build\lib\Release\opencv_video231.lib"
并包括目录:

INCLUDEPATH += "C:\Program Files\openCV_VS_static\opencv\build\include"
INCLUDEPATH += "C:\Program Files\openCV_VS_static\opencv\build\include\opencv"
当我尝试构建时,会出现以下错误:

LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(mlock.obj) : error LNK2005: __unlock already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(mlock.obj) : error LNK2005: __lock already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(crt0dat.obj) : error LNK2005: __initterm_e already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(crt0dat.obj) : error LNK2005: __exit already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(crt0dat.obj) : error LNK2005: __cexit already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(crt0dat.obj) : error LNK2005: __amsg_exit already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) already defined in MSVCRT.lib(MSVCR100.dll)
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_a already defined in MSVCRT.lib(cinitexe.obj)
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in MSVCRT.lib(cinitexe.obj)
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in MSVCRT.lib(cinitexe.obj)
LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in MSVCRT.lib(cinitexe.obj)
LIBCMT.lib(errmode.obj) : error LNK2005: ___set_app_type already defined in MSVCRT.lib(MSVCR100.dll)
LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library

任何帮助或建议。

< P>问题似乎是链接器试图组合不同的、不兼容的Visual C++运行库(CRT)版本。让我在野外猜测一下:你的项目的每一部分和你链接的库都不是用VisualC++中的代码生成选项生成的。
我想知道当构建OpenCV静态库时,/NoDebug的开关D能解决这个挑战吗?除了取消选中BUILD\u SHARED\u LIBS之外,我还取消选中了BUILD\u WITH\u STATIC\u CRT,这解决了这个特殊问题

确保项目属性->配置属性->c/c++>代码生成:运行时库是多线程的(/MT)

还有其他解决方案吗?使用特定标志重建openCV,或者更改Qt Creator上的构建选项?对于构建OpenCV库,我只是利用cmake生成的解决方案文件构建了它,未选中“构建共享库”复选框,据我所知,这是获得静态库解决方案所需的全部操作。在我读到的Qt Creator中,导入这些LIB应该是一件简单的事情?仅用于测试目的:您是否会尝试在发布模式而不是调试模式下编译您的项目?我一直在做发布。Debug向我提供了类似“opencv_core231.lib(drawing.obj)”的错误:-1:错误:LNK2038:检测到“_ITERATOR_Debug_LEVEL”的不匹配:值“0”与main.obj中的值“2”不匹配。下面的解决方案为我修复了它,尽管我怀疑我将不得不重新启用该选项(因为它看起来不是静态链接的,我也希望这样做可以使我的项目可重新发布)+1。似乎预构建的Windows静态库是使用静态CRT(/MT)构建的。如果您的项目使用动态CRT(/MD),您必须自己重新生成OpenCV。此或/MTd用于调试生成