2010-10-21 5 views
1

У меня есть h- и cpp-файл с некоторыми вычислениями, которые использовались во многих моих проектах.Ошибка LNK 2001 с struct

Теперь я попытался поместить их в отдельную 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" ([email protected]@[email protected]@A) 

Любые подсказки? Спасибо

+0

ли вы получить LINK2001 при связывании DLL или приложения-потребителя? Также может оказаться полезным включить точное сообщение об ошибке. – harper

+0

Я получаю сообщение об ошибке, при связывании dll – Simon

+0

сообщение об ошибке: ошибка LNK2001: Nichtaufgeloestes externes Символ «struct uTSystem ABC» (? ABC @@ 3UuTSystem @@ A) – Simon

ответ

1

Предполагая, что вы определили TOOLS_EXPORT при компиляции DLL, вы будете экспортировать переменную ABC. В коде вы определяете его как extern uTSystem ABC; Это нормально для файла заголовка, который вы используете совместно с потребляющей DLL.

Хотя ехЬегп заявляет, что есть переменная 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;