c - 奇怪的LNK2001 : unresolved external symbol

标签 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

现在我做错了什么?

最佳答案

看起来优化器正在识别您的循环正在执行的操作,并将其替换为对 _memset 的调用,当您专门排除标准库时,该调用不可用。

关于c - 奇怪的LNK2001 : unresolved external symbol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24067970/

相关文章:

c# - 如何获取适用于 Visual Studio 2010 的 Silverlight 附加组件和一些示例代码?

c - 从 'double' 转换为 'int' 意味着可能会丢失数据?

windows - MS 加载程序将 PE 文件的哪些部分映射到内存中?

c++ - 如何在 Windows 10 上检测辅助显示器的 native 屏幕分辨率或比例因子

Windows 服务设置用户帐户

C# 后台 worker 划分

visual-studio-2010 - 在 Visual Studio 2010 IDE 中更改深蓝色背景

无法访问子进程中创建的共享内存

c - linux中libc如何修改CS寄存器

c++ - 一次发送一些字节