いくつかの静的ライブラリ (作成したものと作成していないもの) に依存する Windows 実行可能ファイルをリンクしようとしています。リンクを実行すると、次のような一連のエラーが表示されます。
LIBCMT.lib(mlock.obj) : error LNK2005: _unlock already defined in MSVCRT.lib(MSVCR100.dll)
これは、古典的な /MD 対 /MT の問題です (C ランタイムが静的にリンクされているか動的にリンクされているか)。最初に簡単な解決策を試し、リンカーフラグを追加しました
/nodefaultlib:libcmt /nodefaultlib:libcpmt
しかし、それは異なるエラーを引き起こしました:
msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __cdecl std::_Locinfo::~_Locinfo(void)" (??1_Locinfo@std@@QEAA@XZ) already defined in gtest.lib(gtest-all.cc.obj)
gtest.lib(gtest-all.cc.obj) : error LNK2001: unresolved external symbol "private: static int std::locale::id::_Id_cnt" (?_Id_cnt@id@locale@std@@0HA)
私が構築しているライブラリを調べましたが、私が知る限り、それらはすべて /MD を構築しています。「私が知る限り」と言うのは、それらのいくつかは独自のメイクファイルが付属するサードパーティのライブラリであるため、ビルドプロセスを完全に制御できない..
ライブラリ(EXEとDLLのみ)で「依存」が機能するとは思わない、リンクしているさまざまなライブラリを見て、必要なときにどれがlibcmtに取り込まれているかを確認できるツールはありますか代わりに msvcrt を使用していますか?