error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned int)"
Posted on 2005-03-18 15:09 jjccx 阅读(15988) 评论(4) 编辑 收藏 举报1.问题描述:
在VS2003中,新建一个类库(.NET)项目,系统自动生成一个类:
namespace Test
{
public __gc class Class1
{
// TODO: 在此添加此类的方法。
};
}
当我们在类中添加如下一个函数后:
void f()
{
char* s = new char[90];
delete[] s;
}
点击生成,编译通过,但链接却无法通过,出现如下两个链接错误:
error LNK2001: 无法解析的外部符号 "void * __cdecl operator new(unsigned int)"
error LNK2001: 无法解析的外部符号 "void __cdecl operator delete(void *)"
2.解决方案:
在网上搜索了一天半,终于解决,在项目属性里添加一个附加依赖项:msvcrt.lib。这样再生成项目就不会出现上面的错误了。
3.遗留问题:
虽然项目是生成了,但是在MSDN里面有一个例程:“MCppWrapper 示例:说明如何用托管扩展包装 C++ DLL”(Internet Url:MCppWrapper 示例:说明如何用托管扩展包装 C++ DLL),它里面有一个工程MCppSuffix,在文件suffix.cpp中,有如下一个类:
public __gc class substring_w
{
public:
String * find_suffix(String * s, int pos)
{
int length = s->Length;
char * in_string = new char[length+1];//notice the new operator in this line
for(unsigned short i = 0; i<length; i++)
{
in_string[i] = (char)s->Chars[i];
}
in_string[length] = '\0';
substring s0 = substring(in_string);
delete [] in_string;//notice the delete operator in this line
return s0.suffix(pos);
}
};
当我们生成此项目时,却没有出现上面所述的问题,并却本工程也没有附加msvcrt.lib,不知这个问题的本质是怎样的。