1

我有一个 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)

有什么提示吗?谢谢

4

1 回答 1

1

假设您在编译 DLL 时定义了 TOOLS_EXPORT,您将导出变量ABC。在您的代码中,您将其定义为extern uTSystem ABC;与使用 DLL 共享的头文件没问题。

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

uTSystem ABC;

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

---- 工具.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;

---- 工具.cpp ----

#include tools.h

uTSystem ABC;
于 2010-10-21T17:20:24.290 回答