Ошибка lnk2005, связывающая статические библиотеки openCV с Visual Studio и Qt Creator

Я построил статические библиотеки openCV 2.3. В настоящее время мой проект использует динамические без проблем, но теперь я хочу использовать статические библиотеки. Я добавила к своему либс .pro файл:

LIBS += "C:Program FilesopenCV_VS_staticopencvbuildlibReleaseopencv_calib3d231.lib" 
"C:Program FilesopenCV_VS_staticopencvbuildlibReleaseopencv_contrib231.lib" 
"C:Program FilesopenCV_VS_staticopencvbuildlibReleaseopencv_core231.lib" 
"C:Program FilesopenCV_VS_staticopencvbuildlibReleaseopencv_features2d231.lib" 
"C:Program FilesopenCV_VS_staticopencvbuildlibReleaseopencv_flann231.lib" 
"C:Program FilesopenCV_VS_staticopencvbuildlibReleaseopencv_gpu231.lib" 
"C:Program FilesopenCV_VS_staticopencvbuildlibReleaseopencv_haartraining_engine.lib" 
"C:Program FilesopenCV_VS_staticopencvbuildlibReleaseopencv_highgui231.lib" 
"C:Program FilesopenCV_VS_staticopencvbuildlibReleaseopencv_imgproc231.lib" 
"C:Program FilesopenCV_VS_staticopencvbuildlibReleaseopencv_legacy231.lib" 
"C:Program FilesopenCV_VS_staticopencvbuildlibReleaseopencv_ml231.lib" 
"C:Program FilesopenCV_VS_staticopencvbuildlibReleaseopencv_objdetect231.lib" 
"C:Program FilesopenCV_VS_staticopencvbuildlibReleaseopencv_ts231.lib" 
"C:Program FilesopenCV_VS_staticopencvbuildlibReleaseopencv_video231.lib"

и включить dirs:

INCLUDEPATH += "C:Program FilesopenCV_VS_staticopencvbuildinclude"
INCLUDEPATH += "C:Program FilesopenCV_VS_staticopencvbuildincludeopencv"

когда я пытаюсь построить я получаю эти ошибки:

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

любая помощь или предложения ценится.

3 ответов


на CMake, при создании статических библиотек openCV, помимо снятия флажка BUILD_SHARED_LIBS я также снял флажок BUILD_WITH_STATIC_CRT, и это позаботилось об этой конкретной проблеме


убедитесь, что свойства проекта - >свойства конфигурации - >c / C++>генерация кода: библиотека времени выполнения многопоточна (/MT)


проблема заключается в том, что компоновщик пытается объединить различные несовместимые версии библиотеки среды выполнения Visual C++ (CRT) в один двоичный файл.
позвольте мне угадать в дикой природе: каждая часть вашего проекта и библиотеки, на которые вы ссылаетесь, являются не генерируется с теми же параметрами генерации кода в Visual C++.
интересно, решит ли этот вызов переключатель /NODEFAULTLIB?