MSCVRT ライブラリがリンク時に競合を生成するのはなぜですか?[重複]
-
23-09-2019 - |
質問
この質問にはすでに答えがあります:
私は Visual C++ 2008 でプロジェクトを構築しています。これは、静的 C++ クラス ライブラリのサンプル MFC ベース アプリであり、近々自分のプロジェクトで使用する予定です。デバッグ構成を構築しているときに、次のような結果が得られます。
警告 LNK4098:defaultlib 'MSVCRT' は他のライブラリの使用と競合します。/NODEFAULTLIB:ライブラリを使用します
推奨オプション (デバッグ構成のプロジェクト リンカー設定の [特定のライブラリを無視する] フィールドに「msvcrt」を追加) を使用すると、プログラムはリンクされ、正常に実行されます。ただし、なぜこの競合が発生したのか、なぜ重要なライブラリを無視しなければならないのか、後で問題が予想される場合は無視を追加した場合、または追加しなかった場合はどうなるのかを調べたいと思います(とにかくプログラムはビルドされます)。
同時に、リリース設定では次の警告が表示されます。
警告 LNK4075:'/OPT:ICF' の指定により '/EDITANDCONTINUE' を無視します
警告 LNK4098:defaultlib 'MSVCRTD' は他のライブラリの使用と競合します。/NODEFAULTLIB:ライブラリを使用します
「D」という接尾辞は、これが vc++ ランタイムのデバッグ バージョンであることを意味していると思いますが、なぜ今回これが使用されるのかはわかりません。とにかく、「msvcrtd」を無視フィールドに追加すると、次の形式のリンク エラーが大量に発生します。
エラーLNK2001:未解決の外部シンボル __imp___CrtDbgReportW
ご洞察をいただければ幸いです。
解決
C++ ->Code Generation->Runtime Library
設定)VC ++ランタイムの別のバージョンを使用して、静的ライブラリとリンクする際にこれは通常起こります。
他のヒント
私は(うっかり)RTLの異なる味を混合されたとき、これは通常、私に起こった、デバッグとリリースまたはMTとST(あなたのケースであると思われるもの)などがあります。