LNK2001 - 应该很容易解决..但我只是看不到它! (VS2005)

时间:2012-05-23 12:56:11

标签: visual-c++ linker-errors

我在这里敲我的头..试图解决这些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"

请问离开...是@@后面的线索?

3 个答案:

答案 0 :(得分:1)

链接器告诉您存在类型为ethernetData_g的未知外部符号struct ethernetParams_t *。原因是尽管在您包含的标头中声明了ethernetData_g,但它的定义来自您需要链接的另一个目标文件。由于您没有链接approriate对象文件,链接器无法找到正确的定义

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

答案 1 :(得分:1)

为了使用其他人开发的代码(例如在你的情况下使用静态库),你需要两件事:

  1. 在项目中提供功能签名(包含文件)
  2. 在项目中提供函数实现(库文件)
  3. 看起来你做了第一件事而不是第二件事。这是如何解释链接器以这种非常神秘的形式给出的错误...

答案 2 :(得分:0)

@Attila和@mox可能会将其钉住:您需要链接包含您正在使用的函数实现的objlib文件。

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

你说结构是用C而不是C ++定义的,另一个可能的问题是包含文件中缺少extern "C",请参阅解释here