web-dev-qa-db-ja.com

LNK2038:「RuntimeLibrary」の不一致が検出されました:値「MT_StaticRelease」がfile.objの値「MD_DynamicRelease」と一致しません

MatlabC、およびCudaをプロジェクトに統合しています。 cで記述されたmatlab mx関数をcudaランタイムライブラリに接続するためにMatlab mixを使用しましたが、cファイルとライブラリ間の静的リリースと動的リリースの競合に関するリンクエラーが表示されます。誰でもこれを解決できますか?

error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in file.obj. 
46
Ahmed Hassan

ライブラリとプロジェクトは、Cランタイムライブラリに関して同じ設定でリンクする必要があります。

あなたの場合、1つはCRT DLL(/ MD)にリンクされ、もう1つは静的にリンクされました(/ MT)。

一致と このエラー の両方がなくなることを確認する必要があります。

51
tux3

このエラーは、プロジェクトをライブラリ(通常は拡張子.libのファイル)にリンクしているstaticallyが、Visual Studioプロジェクトのリンカー設定時に発生する可能性があります。 dynamicallyリンク(通常、.dllファイルで実行時にリンクが発生することを意味します)に設定されます。

静的リンクを使用するためにプロジェクトが必要であることを定義するには、Visual Studioを開始します。 ソリューションエクスプローラーペインで、プロジェクト名を右クリックし、プロパティを選択します。以下の図に示すようにプロパティを展開します。C/C++->コード生成->ランタイムライブラリ、ドロップダウンメニューからMulti-threaded (/MT)オプションを選択します。 enter image description here

35
Rahav

共有目的のため。

古い2008ソリューションを正常に開いて実行する2017 VSバージョンを使用しています。何らかの理由で、すべてのライブラリとメインプロジェクトを同じランタイムライブラリパラメータ(プロパティの下、上記のポスターを参照)を持つように変更しても、同じエラーメッセージが表示される場合でも、個々の.vcxprojファイルを開いてみてください。 「RuntimeLibrary」の下で検索し、すべてのvcxprojファイルでそれらの値を同じにします。何らかの理由で、これらのvcxprojファイルは、プロパティ設定で指定した値と同じ値に更新されることはなく、vcxprojで手動で変更する必要があります。

必要に応じて、vcprojファイルも開き、それらの「RuntimeLibrary」を同じように変更します。ここで、値は数字です。

3
GWKit

他の人が言及したように、cl.exeのランタイムライブラリスイッチは、コンパイルされたすべてのモジュール間で一致する必要があります。 MSBuildでは、これはClCompile>/RuntimeLibraryとして参照されます。

ただし、これらが一致しても、プロジェクトのどこかに「#undef DEBUG」または「#undef _DEBUG」があると、この問題が発生する可能性があります。 VC++ランタイムライブラリヘッダーの一部であるyvals.hヘッダーは、これらのマクロが変更された場合、objファイルにコンパイルされるものを変更できます。

「dumpbin/all foo.obj> foo.txt」を使用して、実際にobjファイルに何が入っているかを確認します。その出力でヘッダー「リンカーディレクティブ」を探します。

0
hoopyfrood

これはGWKitへのコメントとしてはうまく機能しますが、評判はありません。彼は、vcxprojファイルは実際には変更されないため、更新する必要があると述べています。私の場合、「saveAll」を押してからビジュアルスタジオを閉じた後にのみ保存されました。保存されたプロパティへの変更を保存するかどうかを尋ねるプロンプトが表示され、[はい]をクリックすると、vcxprojファイルが適切に更新されました。

0
Jonah Simon