结构的LNK 2001错误

时间:2010-10-21 08:04:04

标签: visual-c++ struct lnk2001

我有一个h-和一个cpp文件,在我的许多项目中使用了一些计算。

现在我尝试将它们放在一个单独的dll中,因此这些文件不应该包含在每个项目中。

链接时,我得到一个结构的LNK2001(未解析的符号)错误,但是lib和dll在正确的位置。

我使用

#ifdef TOOLS_EXPORTS
#define TOOLS_API __declspec(dllexport)
#else
#define TOOLS_API __declspec(dllimport)
#endif

宏,适用于几种方法。

结构被定义为

TOOLS_API typedef  struct  {
char Name[128];
}  uTSystem;

在使用dll的结构文件中,它也正确定义(?)

extern uTSystem ABC;

错误消息是:

error LNK2001: Nichtaufgeloestes externes Symbol "struct uTSystem ABC" (?ABC@@3UuTSystem@@A)

任何提示?谢谢

1 个答案:

答案 0 :(得分:1)

假设您在编译DLL时定义了TOOLS_EXPORT,您将导出变量ABC。在您的代码中,您将其定义为extern uTSystem ABC;这对于与消费DLL共享的头文件是可以的。

虽然extern声明存在变量ABC,但您必须在其中一个.cpp文件中定义它:

uTSystem ABC;

前面没有extern。您的文件可能如下所示:

---- tools.h ----

#ifdef TOOLS_EXPORTS
#define TOOLS_API __declspec(dllexport)
#else
#define TOOLS_API __declspec(dllimport)
#endif

TOOLS_API typedef  struct  {
char Name[128];
}  uTSystem;

extern uTSystem ABC;

---- tools.cpp ----

#include tools.h

uTSystem ABC;