LNK 2001 ошибка со структурой - PullRequest
       37

LNK 2001 ошибка со структурой

1 голос
/ 21 октября 2010

У меня есть 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 Ответ

1 голос
/ 21 октября 2010

Если вы определили TOOLS_EXPORT при компиляции DLL, вы экспортируете переменную 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;
...