LNK 2001 结构错误

发布于 2024-09-28 13:57:48 字数 664 浏览 3 评论 0原文

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

有任何提示吗?谢谢

I have a h- and a cpp-file with some calculations used in many of my projects.

Now I tried to put them in a separate dll, so the files should not be included in every project.

When linking I get a LNK2001 (unresolved symbol) error for a struct, however lib and dll are in the right place.

I use the

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

macro, which works fine for a couple of methods.

The struct is defined like that

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

And in the files using this struct from the dll its also defined correctly(?)

extern uTSystem ABC;

The error message is:

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

Any hints? Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青衫负雪 2024-10-05 13:57:48

假设您在编译 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;

Assuming you defined TOOLS_EXPORT when compile the DLL you will export the variable ABC. In your code you define it as extern uTSystem ABC; That's ok for the header file, that you share with the consuming DLL.

While the extern declares that there is a variable ABC you must define it in one of your .cpp file:

uTSystem ABC;

without the extern in front. Your file might look like this:

---- 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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文