我正在尝试使用 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
现在我做错了什么?
最佳答案
看起来优化器正在识别您的循环正在执行的操作,并将其替换为对 _memset 的调用,当您专门排除标准库时,该调用不可用。
关于c - 奇怪的LNK2001 : unresolved external symbol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24067970/