2012-04-27 92 views
0

我有一个openCv应用程序,它可以在为代码生成属性使用Mutithreaded Debug Dll选项时正常生成和运行。不过,我想不过来运行的任何计算机上的应用程序,构建在多线程调试模式中失败给LNK 2005个错误,有些例子是在VS2010中构建Opencv2.1应用程序

1> msvcprtd.lib(MSVCP100D.dll):错误LNK2005:“公共:__thiscall 的std :: _ LOCKIT ::〜_Lockit(无效)”(?? 1_Lockit @ @@ STD QAE @ XZ)已经定义 在libcpmtd.lib(xlock.obj)

1> msvcprtd.lib( MSVCP100D.dll):错误LNK2005:“public:__thiscall std :: _ Lockit :: _ Lockit(int)”(?? 0_Lockit @ std @@ QAE @ H @ Z)已在libcpmtd.lib(xlock.obj)中定义

1> msvcprtd.lib(MSVCP100D.dll):error LNK2005:“void __cdecl std :: _ Debug_message(wchar_t const *,wchar_t const *,unsigned int)” (?_Debug_message @ std @@ YAXPB_W0I @ Z)已经在 libcpmtd.lib(stdthrow.obj)定义

1> msvcprtd.lib(MSVCP100D.dll):错误LNK2005: “公共:__thiscall 的std :: _ Container_base12 ::〜_Container_base12(无效)” (?? 1_Container_base12 @ @@ STD QAE @ XZ)在opencv2.obj已经定义

1> MSVCRTD.LIB(MSVCR100D.dll):错误LNK2005:“公共:__thiscall 的std ::例外::异常(类的std ::异常常量&) “ (?? 0exception @ @@ STD QAE @ @@ ABV01 Z)在 LIBCMTD.lib(stdexcpt.obj)已经定义

1> msvcprtd.lib(MSVCP100D.dll):错误LNK2005:”市民:无效 __thiscall的std :: _ Container_base12 :: _ Orphan_all(无效)”(_Orphan_all @ _Container_base12 @性病@@ QAEXXZ?)在 opencv2.obj

1> MSVCRTD.LIB(MSVCR100D.dll)已经定义错误LNK2005:__invalid_parameter 在LIBCMTD.lib(invarg.obj)已经定义

1> MSVCRTD.LIB(MSVCR100D.dll):错误LNK2005:__CrtDbgReportW已经 在LIBCMTD.lib(dbgrptw.obj)定义

1> MSVCRTD.LIB(MSVCR100D.dll):错误LNK2005: “公共:__thiscall 的std ::例外::异常(字符常量* const的&)” (?? 0exception @ @@ STD QAE @ ABQBD @ Z)在 LIBCMTD.lib(stdexcpt.obj)

1> MSVCRTD.LIB(MSVCR100D.dll)已经定义:错误LNK2005:“公共:虚拟 __thiscall std :: exception ::〜exception(void)“(?? 1exception @ std @@ UAE @ XZ)已在 中定义LIBCMTD.lib(stdexcpt.obj)

1> MSVCRTD的.lib(MSVCR100D.dll):错误LNK2005:_fclose已经在LIBCMTD.lib(fclose.obj)定义

1> MSVCRTD.LIB(MSVCR100D.dll):错误LNK2005:_fprintf已经在LIBCMTD.lib定义 (fprintf.obj)

1> MSVCRTD.lib(MSVCR100D.dll):错误LNK2005:_fopen已经在LIBCMTD.lib中定义了 (fopen。OBJ)

1> MSVCRTD.LIB(MSVCR100D.dll):错误LNK2005:_memmove已经在LIBCMTD.lib定义 (memmove.obj)

1> MSVCRTD.LIB(MSVCR100D.dll):错误LNK2005 :_free已定义在 LIBCMTD.lib(dbgfree.obj)

任何建议,将不胜感激。我真的被困在这里,有较小的程序没有问题

感谢

PS我也用的功能从cvBlobslib和LIBSVM代码,但如果你改变使用/MT它不应该成为问题

+0

[OpenCV 2.3 C++ Visual Studio 2010]的可能重复(http://stackoverflow.com/questions/7011238/opencv-2-3-c-visual-studio-2010) – karlphillip 2012-04-27 12:39:38

回答

1

/MTd,那么所有依赖库也需要用这些设置进行编译。

如果情况并非如此,那么这些依赖关系需要链接到动态CRT,并且您的项目尝试链接到静态CRT,导致您看到的“已定义”错误。