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 是在属性中的预处理器定义下定义的。感谢 Balog 的建议——我将不得不重新考虑我是如何做这件事的。我很抱歉没有真正了解细节,这是我很长时间以来第一个使用 gcc 以外的编译器的应用程序。

4

1 回答 1

3

如果您编译您的程序进行调试(即_DEBUG 定义),CRT 可能会使用调用该CrtDebugReport 函数的代码。这仅在 dll 的调试版本中定义。

当然,您可以只添加丢失函数的定义来关闭链接器,但通常的方法是使用一致的设置进行编译。为什么你试图强制 /MD 而不是 /MDd?

于 2013-06-30T00:57:11.187 回答