Visual C++ 2012 を使用して x64 C++ DLL をビルドしようとしました。これは、他の 1 つの静的サードパーティ .lib ファイルをリンクする単純な DLL です。次の警告メッセージが表示されます。
警告 LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合します。/NODEFAULTLIB:ライブラリを使用
私のDLL(および私のDLLをインポートする他のすべてのプロジェクト)が/ MD(マルチスレッドDLLランタイム)を使用している間、他のライブラリは/ MT(マルチスレッド静的ランタイム)リンカーオプションを使用しているようです。サードパーティのライブラリがそのまま提供され、DLL を変更すると、DLL を使用するすべてのプロジェクトで同じ問題が発生するため、これを調和させることはできません。
この問題について、MS とフォーラムからいくつかのページを読みました。しかし、これらのページのどれも、ここでの問題を正確に説明していません。
私が理解していないこと:
異なるランタイム バリアントを使用するコードをリンクすることの害は何ですか (メモリの浪費以外)? これは無視できると言う人もいれば、無視できないかもしれないと言う人もいます。
/NODEFAULTLIB[:library] を使用してもよろしいですか? ドキュメントには、「外部参照を解決するときに検索するライブラリのリストから、指定されたライブラリまたはライブラリを削除する」と記載されています。どのライブラリを「:library」として追加する必要があり、これによりどのように問題が解決されますか?