【问题标题】:Visual Studio C++ 2010 Link Error [closed]Visual Studio C++ 2010 链接错误 [关闭]
【发布时间】:2012-01-14 19:15:23
【问题描述】:

我收到了几个 error LNK2019: unresolved external symbol 错误,但它们不是由于 dlls、libs 或 OO 错误,就像其他关于此链接错误的 StackOverflow 帖子一样。

代码:

https://github.com/mcandre/fgdump/tree/master/cachedump

追踪:

1>------ Build started: Project: cachedump, Configuration: Release Win32 ------
1>LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/OPT:ICF' specification
1>cachedump.obj : error LNK2019: unresolved external symbol "void __cdecl rc4_crypt(struct rc4_state *,unsigned char *,int)" (?rc4_crypt@@YAXPAUrc4_state@@PAEH@Z) referenced in function "unsigned long __cdecl DumpCache(void)" (?DumpCache@@YAKXZ)
1>cachedump.obj : error LNK2019: unresolved external symbol "void __cdecl rc4_setup(struct rc4_state *,unsigned char *,int)" (?rc4_setup@@YAXPAUrc4_state@@PAEH@Z) referenced in function "unsigned long __cdecl DumpCache(void)" (?DumpCache@@YAKXZ)
1>cachedump.obj : error LNK2019: unresolved external symbol "void __cdecl md5_finish(struct md5_context *,unsigned char * const)" (?md5_finish@@YAXPAUmd5_context@@QAE@Z) referenced in function "unsigned long __cdecl DumpCache(void)" (?DumpCache@@YAKXZ)
1>cachedump.obj : error LNK2019: unresolved external symbol "void __cdecl md5_update(struct md5_context *,unsigned char *,unsigned long)" (?md5_update@@YAXPAUmd5_context@@PAEK@Z) referenced in function "unsigned long __cdecl DumpCache(void)" (?DumpCache@@YAKXZ)
1>cachedump.obj : error LNK2019: unresolved external symbol "void __cdecl md5_starts(struct md5_context *)" (?md5_starts@@YAXPAUmd5_context@@@Z) referenced in function "unsigned long __cdecl DumpCache(void)" (?DumpCache@@YAKXZ)
1>C:\Users\andrew\Desktop\src\fgdump\cachedump\Release\cachedump.exe : fatal error LNK1120: 5 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

abc

【问题讨论】:

  • 您对 stackoverflow 并不陌生。难道你不知道这种问题很快就会结束吗?
  • 这个问题不是重复的;它与 LNK2019 上的其他帖子有很大不同。根本原因明显不同,因为这段代码不使用dlls,不使用libs,也不使用OO。
  • 我没有说它是重复的。这只是一个不适合 SO 的问题,因为您给了我们大量代码并要求找出您的错误。重现问题的最小示例发生了什么?

标签: c++ visual-studio linker lnk2019


【解决方案1】:

.c 文件被cl 编译为C 代码,而.cpp 文件被编译为C++ 代码。由于CC++ 代码中符号定义的不同,您的C++ 代码无法看到C 代码中的函数。

在标题中使用 extern "C" 包装器,或者更好地为整个项目使用相同的语言

要使extern "C" 包装器使用以下模板

#ifdef __cplusplus
extern "C"
{
#endif

//put C-function declarations here    

#ifdef __cplusplus
}
#endif

【讨论】:

  • 谢谢。不幸的是,使用它并不能解决我的问题,而且奇怪的是,项目中的其他代码在不使用 extern 声明的情况下也可以正常链接。
  • 应该已经解决了这个问题。 你试过了吗?如果是这样,您尝试了什么?当然,其他代码会正常链接,因为该代码是C++,并且被C++ 代码使用。
  • 请下载并打开 Visual Studio 解决方案。您会亲眼看到添加外部变量没有帮助。
  • @mcandre,抱歉缺席 2 天,我没有时间回答。我认为,你做错了什么,因为在做出这样的断言之前我检查了你的项目。 重命名 .c.cpp 和使extern "C" 确实 对我有用。它应该对你有用,因为它不是魔法。
猜你喜欢
  • 2014-10-17
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 2011-11-05
  • 2011-12-16
  • 2012-02-27
  • 1970-01-01
相关资源
最近更新 更多