0

我在这里敲我的头.. 试图解决这些 LNK2001 错误。帮助页面给了我很多原因,但我看不出哪一个适用。

请知识渊博的 VS 2005 C++ 人员协助解决这些问题?问我问题..有时会有所帮助。如果我不害怕看起来像个心理医生,我会找一只橡皮鸭来解释这个:-)但我坐在办公室里。

错误 LNK2001:无法解析的外部符号“struct ethernetParams_t * ethernetData_g”(?ethernetData_g@@3PAUethernetParams_t@@A) simple_Console.obj

我的代码 simple_console.cpp 试图使用在 C 中定义的结构,但 #includes 的工作方式和 #stdafx 超出了我的范围。包含 ethernetParams_t 的标头包含在 stdafx.h 中

#include "CON_ethernet_defs.h"

请问一下...@@之后的线索是什么?

4

3 回答 3

1

链接器告诉您有一个ethernetData_g类型为 的未知外部符号struct ethernetParams_t *。造成这种情况的原因是,尽管ethernetData_g在您包含的标头中声明了它,但它的定义来自您需要链接的另一个目标文件。由于您没有与适当的目标文件链接,因此链接器找不到正确的定义

您缺少的目标文件必须来自您尝试使用的库,因此请在该文件夹中查找 .obj 文件

于 2012-05-23T13:00:21.600 回答
1

为了使用其他人开发的代码(例如,在您的案例中使用静态库),您需要两件事:

  1. 将函数签名提供到您的项目中(包含文件)
  2. 将功能实现提供到您的项目中(库文件)

看起来你做了第一件事,但没有做第二件事。这是如何解释链接器以这种非常神秘的形式给出的错误......

于 2012-05-23T13:27:30.117 回答
0

@Attila 和 @mox 可能已经解决了:您需要链接到包含您正在使用的函数的实现的objorlib文件。

如果您在解决方案资源管理器中右键单击您的项目,单击属性,然后选择链接器|输入,您可以查看并编辑您链接到的库/目标文件列表(“附加依赖项”)。

您说结构是用 C 而不是 C++ 定义的,另一个可能的问题是extern "C"包含文件中的缺失,请参见此处的解释。

于 2012-05-23T13:45:11.853 回答