ぷるぷるの雑記

低レイヤーがんばるぞいなブログ. 記事のご利用は自己責任で.

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

Visual Studio 2017で外部ライブラリをNuGetしたプロジェクトでビルドする際に「LNK4098 defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。」が発生した.


公式リファレンスによれば、互換性のないライブラリとリンクしようとしている場合に生じるエラーらしい. というのもVisual Studio でビルドすると規定のライブラリは自動的にリンクされるが、ビルド時にリンクする外部ライブラリによってはこの規定のライブラリのどれかをリンクしてはいけない組み合わせがあるのだという.


デフォルトでリンクされるライブラリをリンクさせないために、Visual Studioコマンドラインには/NODEFAULTLIBオプションがある. /NODEFAULTLIBオプションを指定すると外部参照を解決するときに検索するライブラリの一覧からすべての規定のライブラリを削除する. libraryパラメータを使用すると、指定した規定ライブラリだけをリンクしないようになる. 設定は簡単でプロジェクト->プロジェクトのプロパティ->リンカ->入力->特定の規定のライブラリを無視 の項目に除外したいライブラリ名を追加するだけ.

特定の規定のライブラリを無視にmsvcrtd.libを追加

参考

learn.microsoft.com

learn.microsoft.com