我正在尝试使用clr构建应用程序,并尝试使用Multi Threaded 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以外的编译器很长一段时间。答案 0 :(得分:3)
如果编译程序进行调试(即_DEBUG定义),CRT可能会使用调用该CrtDebugReport函数的代码。这仅在dll的调试版本中定义。
当然你可以直接删除缺少函数的定义来关闭链接器,但通常的方法是使用一致的设置进行编译。为什么你试图强制/ MD而不是/ MDd?