我正在使用VS 2013构建DLL,并尝试覆盖某些功能,例如malloc
,calloc
,realloc
和free
。
除了free
之外,一切正常,MSVC会抛出这个错误:
错误LNK2005 _free已在Override.obj中定义
请注意,我正在静态链接到运行时库,并且我将'/nodefaultlib:libcmt.lib /nodefaultlib:libcmtd.lib /nodefaultlib:libc.lib'添加到链接器命令行。
以下是我重写这些功能的方法:
extern "C" {
void *malloc( size_t Size )
{
return g_pCustomAlloc->Alloc( Size );
}
void *calloc( size_t Elements, size_t ElementSize )
{
return g_pCustomAlloc->CAlloc( Elements, ElementSize );
}
void *realloc( void *Ptr, size_t NewSize )
{
return g_pCustomAlloc->Realloc( Ptr, NewSize );
}
void free( void *Ptr )
{
g_pCustomAlloc->Free( Ptr );
}
} // extern "C"