Bueno, al fin descubrí de que se trataba.
Era a nivel de código, pero no era lo que pensaba.
Sucede que MinGW cuando "preprocesa" lee todos los simbolos, y luego mientras compila resuelve de donde viene tal o cual cosa.
En cambio, en Visual C++, se trabaja cada archivo fuente (.cpp) como un "módulo". Entonces, yo tenía esto en un archivo header que englobaba varios "módulos":
Código:
IrrlichtDevice *GD_Sistema::device=NULL;
int GD_Sistema::ContadorElementosGui;
Y en efecto, pescaba esta cabecera, pero no específicamente el archivo gd_agua.cpp y gd_guibarra.cpp
La solución que me dieron (o leí, ya no recuerdo, pero gracias a quien fuera), era poner estas líneas en cada módulo donde hiciera falta, por ejemplo, en el principio de gd_agua.cpp despues de los include poner la linea:
Código:
IrrlichtDevice *GD_Sistema::device=NULL;
y en gd_guibarra.cpp lo mismo con la otra que reclamaba.
Finalmente me funcionó eso, (aunque luego aparecieron más errores, pero los corregí). Muchas gracias.