我有一个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)
任何提示?谢谢
答案 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;