我正在尝试使用Visual Studio 2010创建一个小型C项目。现在我遇到了一个非常奇怪的问题。
我不需要依赖项,因此我使用这些链接器参数进行编译:
#pragma comment(linker,"/NODEFAULTLIB:LIBCMT")
#pragma comment(linker,"/NODEFAULTLIB:MSVCRT")
我实现了我自己的基本memset函数:
void __cdecl _zeromem(char * data,int len)
{
int i;
for (i = 0; i < len; i++)
{
*data = 0x00;
data++;
}
}
我正在尝试使用CreateProcess API生成一个进程,当我使用它时会出现问题:
STARTUPINFO si;
PROCESS_INFORMATION pi;
_zeromem((char *)&pi, sizeof(PROCESS_INFORMATION));
_zeromem((char *)&si, sizeof(STARTUPINFO)); //line that causes linker error
如果我在STARTUPINFO中对第二行归零内存进行注释,那么它编译得很好,如果没有我收到:
core.obj : error LNK2001: unresolved external symbol _memset
D:\myapp.exe : fatal error LNK1120: 1 unresolved externals
现在我做错了什么?
答案 0 :(得分:1)
看起来优化器正在识别你的循环正在做什么,并用_memset调用替换它,当你专门排除标准库时,这不可用。