奇怪的LNK2001:未解析的外部符号

时间:2014-06-05 18:49:52

标签: c windows visual-studio-2010

我正在尝试使用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

现在我做错了什么?

1 个答案:

答案 0 :(得分:1)

看起来优化器正在识别你的循环正在做什么,并用_memset调用替换它,当你专门排除标准库时,这不可用。