在VS2010中构建Opencv2.1应用程序

时间:2012-04-27 06:36:33

标签: visual-studio-2010 opencv

我有一个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中的代码,但它不应该是问题

1 个答案:

答案 0 :(得分:1)

如果您更改为使用/MT/MTd,则还需要使用这些设置编译所有依赖库。

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