繁体   English   中英

C++:错误 LNK2019:未解析的外部符号 __snprintf 在函数中引用

[英]C++: error LNK2019: unresolved external symbol __snprintf referenced in function

我正在尝试编译一个项目,但出现此错误:

1>project.obj : error LNK2019: unresolved external symbol __snprintf referenced in function "unsigned char * __cdecl GetResource(char *,unsigned long &)" (?GetResource@@YAPAEPADAAK@Z)
1>Release/file.bin : fatal error LNK1120: 1 unresolved externals

我正在使用 VC++ 2010 并尝试使用 CodeBlocks 进行编译,但出现类似错误:

windres.exe  -J rc -O coff -i C:\Users\x\Desktop\project\project\File.rc -o .objs\File.res
windres.exe: no resources
Process terminated with status 1 (0 minutes, 0 seconds)

我的项目目录中有 File.rc 但它是 0kb,我不知道如何解决这个问题。

我很确定这与代码中的某些内容无关,所以我没有发布示例,但是如果您需要一个示例,我会发布它。

由于 c++ 和许多其他类似语言如何编译和链接代码,会产生链接器错误。 编译器生成目标文件 (*.obj) 并且只需要函数声明来编译调用这些函数的代码——这就是前向声明和头文件起作用的原因。 编译后,在链接时,链接器会在编译文件(通常在目标文件 (*.obj) 或库 (*.lib) 中)查找这些函数的定义。链接器错误说“未解析的外部符号”意味着声明没有已使用匹配定义。大多数情况下,这是因为声明或定义中的拼写错误,或者因为从未链接过包含该定义的文件。

长话短说,您缺少对图书馆的引用。 这可能是用于发布的 libcmt.lib 和用于调试的 libcmtd.lib。

我知道这篇文章很旧所以这是我对这个问题的回答,以防有人遇到同样的问题

printf 和 scanf 系列函数现在是内联定义的。

所有 printf 和 scanf 函数的定义都已内联移动到 、 和其他 CRT 标头中。 对于在本地声明这些函数而不包含适当的 CRT 头文件的任何程序,这是一个重大更改,导致链接器错误(LNK2019,未解析的外部符号)。 如果可能,您应该更新代码以包含 CRT 头文件(即添加 #include )和内联函数,但如果您不想修改代码以包含这些头文件,另一种解决方案是添加一个额外的库到您的链接器输入,legacy_stdio_definitions.lib。

要将此库添加到 IDE 中的链接器输入,请打开项目节点的上下文菜单,选择“属性”,然后在“项目属性”对话框中选择链接器,然后编辑链接器输入以将 legacy_stdio_definitions.lib 添加到分号- 分隔列表。

如果您的项目链接到使用早于 2015 年的 Visual C++ 版本编译的静态库,则链接器可能会报告未解析的外部符号。 这些错误可能引用了 _iob、_iob_func 的内部 stdio 定义,或某些 stdio 函数的相关导入(以imp * 的形式)。 Microsoft 建议您在升级项目时使用最新版本的 Visual C++ 编译器和库重新编译所有静态库。 如果库是第三方库,其源代码不可用,您应该向第三方请求更新的二进制文件,或者将该库的使用封装到一个单独的 DLL 中,然后使用旧版本的 Visual C++ 编译器进行编译和图书馆。

System_CAPS_warningWarning

如果您使用 Windows SDK 8.1 或更早版本进行链接,您可能会遇到这些未解决的外部符号错误。 在这种情况下,您应该通过将 legacy_stdio_definitions.lib 添加到链接器输入来解决错误,如前所述。

另一个答案是正确的(缺少参考)。 但是,在我的情况下(使用 VS2013),出现了一个问题,因为 snprintf 前面没有下划线。 我添加了下划线(调用了 _snprintf),并在其他情况下在标题中添加了“#define snprintf _snprintf”。 它解决了链接问题。 HTH

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM