今天在学习MFC的过程中遇到了一个问题,在include了afx.h后报错,说不能使用“/MD”;搜了一下网上说是vs本身的报错,于是换用了“/MT”;然后出现了重定义的链接错误:
1>uafxcwd.lib(afxmem.obj) : error LNK2005: “void * __cdecl operator new(unsigned int)” (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new_scalar.obj) 中定义
1>uafxcwd.lib(afxmem.obj) : error LNK2005: “void __cdecl operator delete(void *)” (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(delete_scalar.obj) 中定义
1>uafxcwd.lib(afxmem.obj) : error LNK2005: “void __cdecl operator delete[](void *)” (??_V@YAXPAX@Z) 已经在 LIBCMTD.lib(delete_array.obj) 中定义
搜了一些文章,决定简要总结一下;
其实现在还是感觉有点模糊的说;
顺便发现了一本一定要看的书。。。写进小本本 =。=~
本例原因:
CRT 库对 new、delete 和 DllMain 函数使用弱外部链接。MFC 库也包含 new、delete 和 DllMain 函数。这些函数要求先链接 MFC 库,然后再链接 CRT 库。
解决方法:
1.配置MFC的使用为在静态库中使用MFC:
属性->常规->MFC的使用