C++ C++;VS2012中的自定义内存分配链接错误
尝试覆盖VS2012中的默认内存分配函数时,出现以下链接器错误: 1> Main.obj:错误LNK2005:“void*\uu cdecl运算符新(未签名 int)”(??2@YAPAXI@Z) 已在MSVCRTD.lib(MSVCR110D.dll)中定义 1> Main.obj:错误LNK2005:“无效uu cdecl运算符删除(无效*)” (??3@YAXPAX@Z) 已在MSVCRTD.lib(MSVCR110D.dll)中定义 1> c:\users\documents\visual studio 2012\Projects\CustomMemoryAllocator\Debug\CustomMemoryAllocator.exe: 致命错误LNK1169:找到一个或多个多重定义符号 这是我的代码(我没有收到intellisense错误):C++ C++;VS2012中的自定义内存分配链接错误,c++,visual-studio,visual-c++,visual-studio-2012,C++,Visual Studio,Visual C++,Visual Studio 2012,尝试覆盖VS2012中的默认内存分配函数时,出现以下链接器错误: 1> Main.obj:错误LNK2005:“void*\uu cdecl运算符新(未签名 int)”(??2@YAPAXI@Z) 已在MSVCRTD.lib(MSVCR110D.dll)中定义 1> Main.obj:错误LNK2005:“无效uu cdecl运算符删除(无效*)” (??3@YAXPAX@Z) 已在MSVCRTD.lib(MSVCR110D.dll)中定义 1> c:\users\documents\visua
#包括
使用名称空间std;
void*运算符新(大小\u t大小){
如果(void*mem=malloc(尺寸)){
无法以正确的顺序链接库
正在尝试在文件顶部添加
#pragma comment(linker, "/nodefaultlib:libc.lib")
#pragma comment(linker, "/nodefaultlib:libcd.lib")
<> >遵循指令。尝试使用DLL而不是静态链接库。转到ProjtProjt/C++ +代码生成/运行库并选择DLL选项。
Windows将DLL或EXE称为模块。不允许模块乘法定义符号,但一个进程使用的两个不同模块可以定义同一符号。使用DLL时,运算符new()是在您和MSVC模块中定义的,不会导致错误。太好了!您能详细说明一下问题吗?可能是一般问题?这是一个仅限于VS的问题吗?您的线路做了什么?是什么导致了这个问题?Thanks@user997112当MFC和CRT碰巧以错误的顺序获得链接时,new的过载
,delete
,失败严重。Microsoft page详细解释了原因。这些pragma
指令用于链接器提取那些LIB是的,据我所知,这只发生在VC++上。您好-您能详细说明DLL选项与静态选项的区别/后果吗?谢谢
#pragma comment(linker, "/nodefaultlib:libc.lib")
#pragma comment(linker, "/nodefaultlib:libcd.lib")