C++ C++;:错误LNK2019:函数中引用了未解析的外部符号\uuu snprintf

C++ C++;:错误LNK2019:函数中引用了未解析的外部符号\uuu snprintf,c++,visual-c++,codeblocks,C++,Visual C++,Codeblocks,我正在尝试编译一个项目,但遇到以下错误: 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 LN

我正在尝试编译一个项目,但遇到以下错误:

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,还尝试使用代码块进行编译,但得到了一个类似的错误:

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)中查找这些函数的定义。链接器错误为“未解析的外部符号”表示使用了没有匹配定义的声明。这通常是因为声明或定义中存在拼写错误,或者因为包含该定义的文件从未链接


长篇短文,你缺少一个库的引用。它可能是用于发布的LIbCM.LIB和调试的LIbCMTD.LIB。< /P> < P>链接器错误是由于C++和许多其他类似语言如何编译和链接代码而生成的。编译器生成对象文件(*.Obj.Objor)。编译调用这些函数的代码时只需要函数声明,这就是转发声明和头文件工作的原因。编译后,链接器在链接时在编译文件(通常在对象文件(*.obj)或库(*.lib)中查找这些函数的定义。链接器错误为“未解析外部符号”表示使用了没有匹配定义的声明。这通常是因为声明或定义中存在拼写错误,或者因为包含该定义的文件从未链接


长话短说,您缺少对库的引用。发布时可能是libcmt.lib,调试时可能是libcmtd.lib。

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

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

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

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

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

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

如果您的项目链接到了用Visual C++的版本编译的2015以上的静态库,链接器可能报告一个未解析的外部符号。这些错误可能引用了针对IOIB、SyIOBu-FUNC的内部STDIO定义,或者以IMP*形式的某些STDIO函数的相关导入。微软建议您重新构建。在升级项目时,使用Visual C++编译器和库的最新版本将所有静态库都堆入其中。如果库是第三方库,对于该源不可用,则您应该请求来自第三方的更新二进制文件,或者将该库的使用封装到与OL编译的单独DLL中。DER版本的Visual C++编译器和库。 系统\u CAPS\u警告警告


如果您正在链接Windows SDK 8.1或更早版本,您可能会遇到这些未解决的外部符号错误。在这种情况下,您应该按照前面所述,通过向链接器输入中添加旧的_stdio _definitions.lib来解决此错误。

我知道这篇文章很旧,因此这是我对这个问题的解答,以防有人有同样的问题

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

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

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

如果你的项目