リンカー ツールの警告 LNK4098

defaultlib 'library' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください

互換性のないライブラリとリンクしようとしています。

Note

異なる種類の混在を防ぐためのディレクティブが、ランタイム ライブラリに含まれるようになりました。 この警告は、同じプログラムで、異なる種類のランタイム ライブラリを使おうとした場合、また、ランタイム ライブラリのデバッグ バージョンと非デバッグ バージョンを併用しようとした場合に発生します。 たとえば、別々の種類のランタイム ライブラリ (デバッグとリテールなど) を使用するように 2 つのファイルをコンパイルし、それらをリンクしようとした場合、この警告が発生します。 同じランタイム ライブラリを使用するようにすべてのソース ファイルをコンパイルする必要があります。 詳細については、「/MD、/MT、/LD (ランタイム ライブラリの使用)」コンパイラ オプションを参照してください。

リンカーの /VERBOSE:LIB スイッチを使用すると、リンカーが検索するライブラリを確認できます。 たとえば、マルチスレッドの非デバッグ ランタイム ライブラリを実行可能ファイルで使用する場合、返されるリストには LIBCMT.lib が含まれますが、LIBCMTD.lib、MSVCRT.lib、MSVCRTD.lib は含まれません。 無視するライブラリごとに /NODEFAULTLIB を使用して、正しくないランタイム ライブラリを無視するようリンカーに指定できます。

次の表では、使用するランタイム ライブラリ別に、無視する必要があるライブラリを示しています。 コマンド ラインで、無視するライブラリごとに 1 つの /NODEFAULTLIB オプションを使用します。 Visual Studio IDE で、[特定の既定のライブラリの無視] プロパティに、無視するライブラリをセミコロンで区切って指定します。

このランタイム ライブラリを使用するには 次のライブラリを無視します
マルチスレッド (libcmt.lib) msvcrt.lib、libcmtd.lib、msvcrtd.lib
DLL を使用したマルチスレッド (msvcrt.lib) libcmt.lib、libcmtd.lib、msvcrtd.lib
デバッグ マルチスレッド (libcmtd.lib) libcmt.lib、msvcrt.lib、msvcrtd.lib
DLL を使用したデバッグ マルチスレッド (msvcrtd.lib) libcmt.lib、msvcrt.lib、libcmtd.lib

たとえば、この警告が発生し、非デバッグかつ DLL バージョンのランタイム ライブラリを使用する実行可能ファイルを作成したい場合は、リンカーで次のオプションを使用できます。

/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib