Экспорт статических данных в DLL

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

Я не могу понять, как решить это. Что я делаю неправильно? Как я могу преодолеть эти ошибки?

Постскриптум Код был изначально разработан для Linux, и комбинация .so / binary работает без проблем.

РЕДАКТИРОВАТЬ: В данном случае статические переменные не ссылаются непосредственно на приложение, но метод встроен, поскольку он находится в заголовке. Мне удалось устранить ошибки ссылки, переместив методы в файл .cpp.

Ответы на вопрос(3)

Ваш ответ на вопрос