我有一个openCv应用程序,在使用Mutithreaded Debug Dll选项进行代码生成属性时可以构建并运行良好。但是,我想在任何计算机上运行该应用程序,但是,在多线程调试模式下,构建失败会产生LNK 2005错误,一些示例
1> msvcprtd.lib(MSVCP100D.dll):错误LNK2005:“public:__ thishisall std :: _ Lockit ::〜_Lockit(void)“(?? 1_Lockit @ std @@ QAE @ XZ)已定义 在libcpmtd.lib(xlock.obj)
1> msvcprtd.lib(MSVCP100D.dll):错误LNK2005:“public:__ thishisall std :: _ Lockit :: _ Lockit(int)“(?? 0_Lockit @ std @@ QAE @ H @ Z)已定义 在libcpmtd.lib(xlock.obj)
1> msvcprtd.lib(MSVCP100D.dll):错误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:“public:__ thishisall 的std :: _ Container_base12 ::〜_Container_base12(无效)” (?? 1_Container_base12 @std @@ QAE @ XZ)已在opencv2.obj中定义
1> MSVCRTD.lib(MSVCR100D.dll):错误LNK2005:“public:__ thishisall std :: exception :: exception(class std :: exception const&)“ (?? 0exception @ std @@ QAE @ ABV01 @@ Z)已定义于 LIBCMTD.lib(stdexcpt.obj)
1> msvcprtd.lib(MSVCP100D.dll):错误LNK2005:“public:void __thiscall std :: _ Container_base12 :: _ Orphan_all(void)“(?_ Orphan_all @ _Container_base12 @std @@ QAEXXZ)已定义于 opencv2.obj
1> MSVCRTD.lib(MSVCR100D.dll):错误LNK2005:__ inevalid_parameter 已在LIBCMTD.lib(invarg.obj)中定义
1> MSVCRTD.lib(MSVCR100D.dll):错误LNK2005:__CrtDbgReportW已经 在LIBCMTD.lib(dbgrptw.obj)
中定义1> MSVCRTD.lib(MSVCR100D.dll):错误LNK2005:“public:__ thishisall std :: exception :: exception(char const * const&)“ (?? 0exception @ std @@ QAE @ ABQBD @ Z)已经定义了 LIBCMTD.lib(stdexcpt.obj)
1> MSVCRTD.lib(MSVCR100D.dll):错误LNK2005:“public:virtual __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)
任何建议将不胜感激。我真的被困在这里,小程序没有问题
谢谢
P.S我也使用cvBlobslib中的函数和LIBSVM中的代码,但它不应该是问题
答案 0 :(得分:1)
如果您更改为使用/MT
和/MTd
,则还需要使用这些设置编译所有依赖库。
如果不是这种情况,那么这些依赖关系需要链接到动态CRT,并且您的项目正在尝试链接到静态CRT,导致您看到的“已定义”错误。