1

コード生成プロパティに Mutithreaded Debug Dll オプションを使用すると、正常にビルドおよび実行される openCv アプリケーションがあります。ただし、任意のコンピューターでアプリケーションを実行したいのですが、ビルドがマルチスレッド デバッグ モードで失敗し、LNK 2005 エラーが発生します。いくつかの例を次に示します。

1>msvcprtd.lib(MSVCP100D.dll): エラー LNK2005: "public: __thiscall std::_Lockit::~_Lockit(void)" (??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): エラー 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: __thiscall std::_Container_base12::~_Container_base12(void)" (??1_Container_base12@std@@QAE@XZ) は opencv2.obj で既に定義されています

1>MSVCRTD.lib(MSVCR100D.dll): エラー LNK2005: "public: __thiscall 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: __invalid_parameter はすでに LIBCMTD.lib(invarg.obj) で定義されています

1>MSVCRTD.lib(MSVCR100D.dll): エラー LNK2005: __CrtDbgReportW はすでに LIBCMTD.lib(dbgrptw.obj) で定義されています

1>MSVCRTD.lib(MSVCR100D.dll): エラー LNK2005: "public: __thiscall 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) で定義されています

任意の提案をいただければ幸いです。私は本当にここで立ち往生しています。小さなプログラムでは問題ありません

ありがとう

PS cvBlobslib の関数と LIBSVM のコードも使用していますが、問題にはなりません。

4

1 に答える 1

1

/MTとを使用するように変更した場合/MTdは、すべての依存ライブラリもこれらの設定でコンパイルされている必要があります。

そうでない場合、これらの依存関係は動的CRTにリンクする必要があり、プロジェクトは静的CRTにリンクしようとしているため、「定義済み」エラーが発生します。

于 2012-04-27T10:49:05.270 に答える