Exportar datos estáticos en una DLL

Tengo una DLL que contiene una clase con staticmiembros. yo suelo__declspec(dllexport) para hacer uso de esta clasemétodos. Pero cuando lo vinculo a otro proyecto e intento compilarlo, obtengo errores de "símbolo externo no resuelto" para los datos estáticos.

p.ej. En DLL, Test.h

class __declspec(dllexport) Test{
protected:
    static int d;
public:
    static void m(){int x = a;}
}

En DLL, Test.cpp

#include "Test.h"

int Test::d;

En la aplicación que usa Test, llamo m ().

También intenté usar __declspec (dllexport) para cada método por separado, pero aún obtengo los mismos errores de enlace para los miembros estáticos.

Si reviso la DLL (.lib) usando dumpbin, podría ver que los símbolos se han exportado.

Por ejemplo, la aplicación da el siguiente error en el momento del enlace:

1>Main.obj : error LNK2001: unresolved external symbol "protected: static int CalcEngine::i_MatrixRow" (?i_MatrixRow@CalcEngine@@1HA)

Pero el basurero de .lib contiene:

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

No puedo entender cómo resolver esto. ¿Qué estoy haciendo mal? ¿Cómo puedo superar estos errores?

PD El código se desarrolló originalmente para Linux y la combinación .so / binary funciona sin problemas.

EDITAR: en el caso dado, la aplicación no hace referencia directa a las variables estáticas, pero el método está en línea ya que está en el encabezado. Pude resolver los errores de enlace moviendo los métodos al archivo .cpp.

Respuestas a la pregunta(1)

Su respuesta a la pregunta