У меня есть DLL, которая содержит класс со статическими членами . Я использую __declspec(dllexport)
, чтобы использовать методы этого класса . Но когда я связываю его с другим проектом и пытаюсь скомпилировать, я получаю ошибки «неразрешенный внешний символ» для статических данных.
например.
В DLL, Test.h
class __declspec(dllexport) Test{
protected:
static int d;
public:
static void m(){int x = a;}
}
В DLL, Test.cpp
#include "Test.h"
int Test::d;
В приложении, которое использует Test, я вызываю m ().
Я также пытался использовать __declspec (dllexport) для каждого метода в отдельности, но я все еще получаю те же ошибки связи для статических членов.
Если я проверяю DLL (.lib) с помощью dumpbin, я вижу, что символы были экспортированы.
Например, приложение выдает следующую ошибку во время ссылки:
1>Main.obj : error LNK2001: unresolved external symbol "protected: static int CalcEngine::i_MatrixRow" (?i_MatrixRow@CalcEngine@@1HA)
Но в хранилище .lib содержится:
Version : 0
Machine : 14C (x86)
TimeDateStamp: 4BA3611A Fri Mar 19 17:03:46 2010
SizeOfData : 0000002C
DLL name : CalcEngine.dll
Symbol name : ?i_MatrixRow@CalcEngine@@1HA (protected: static int CalcEngine::i_MatrixRow)
Type : data
Name type : name
Hint : 31
Name : ?i_MatrixRow@CalcEngine@@1HA
Я не могу понять, как это решить. Что я делаю неправильно? Как я могу преодолеть эти ошибки?
P.S. Код был изначально разработан для Linux, и комбинация .so / binary работает без проблем
РЕДАКТИРОВАТЬ: В данном случае статические переменные не ссылаются непосредственно приложением, но метод встроен, поскольку он находится в заголовке. Мне удалось устранить ошибки ссылок, переместив методы в файл .cpp.