3

clr を使用してアプリケーションをビルドしようとしており、マルチ スレッド DLL (/MD) を使用してコンパイルしようとしていますが、動作しません。それは私にこれを与え続けます:

WindowsFormsApplication3.obj : error LNK2020: unresolved token (0A000796) "extern "C" int __cdecl _CrtDbgReportW(int,wchar_t const *,int,wchar_t const *,wchar_t const *,...)" (?_CrtDbgReportW@@$$J0YAHHPB_WH00ZZ)
WindowsFormsApplication3.obj : error LNK2020: unresolved token (0A000797) "extern "C" int __cdecl _CrtDbgReportW(int,wchar_t const *,int,wchar_t const *,wchar_t const *,...)" (?_CrtDbgReportW@@$$J0YAHHPB_WH00ZZ)
WindowsFormsApplication3.obj : error LNK2001: unresolved external symbol "extern "C" int __cdecl _CrtDbgReportW(int,wchar_t const *,int,wchar_t const *,wchar_t const *,...)" (?_CrtDbgReportW@@$$J0YAHHPB_WH00ZZ)
D:\Users\Student\Documents\Visual Studio 2012\Projects\WindowsFormsApplication3\Debug\WindowsFormsApplication3.exe : fatal error LNK1120: 3 unresolved externals

/MDd でコンパイルすると問題なく動作します。エラーの意味を調べましたが、アクセスできないファイルに問題があります。他の設定が間違っていますか?

編集:私はそれを理解しました。_DEBUG は、プロパティのプリプロセッサ定義で定義されました。バログさん、アドバイスありがとうございます。細かいところがよくわからなくてすみません、久しぶりにgcc以外のコンパイラを使ったアプリです。

4

1 に答える 1

3

デバッグ用にプログラムをコンパイルする場合 (つまり、_DEBUG が定義されている場合)、CRT はその CrtDebugReport 関数を呼び出すコードを使用する場合があります。これは、dll のデバッグ バージョンでのみ定義されます。

確かに、不足している関数の定義をドロップしてリンカーをシャットダウンすることもできますが、通常の方法は、一貫した設定でコンパイルすることです。/MDd の代わりに /MD を強制しようとするのはなぜですか?

于 2013-06-30T00:57:11.187 に答える