Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Proyecto Libre GDT: Problema con el enlazador en Visual C++ 2005 Express

Estas en el tema de Proyecto Libre GDT: Problema con el enlazador en Visual C++ 2005 Express en el foro de C/C++ en Foros del Web. En español le llaman "vinculador" también. El problema es que tengo un código con muchas fuentes. Lo he compilado varias veces en Dev-C++ con Mingw ...
  #1 (permalink)  
Antiguo 02/07/2007, 14:50
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 22 años, 2 meses
Puntos: 4
Proyecto Libre GDT: Problema con el enlazador en Visual C++ 2005 Express

En español le llaman "vinculador" también.

El problema es que tengo un código con muchas fuentes.
Lo he compilado varias veces en Dev-C++ con Mingw y no tengo ni warnings ni errores.

Ahora, quería hacer un proyecto de Visual C++ 2005 Express para el mismo código fuente, pero no me deja compilar (en la etapa de enlazado) por estos errores:

Código:
1>Vinculando...
1>gd_agua.obj : error LNK2001: símbolo externo "public: static class irr::IrrlichtDevice * GD_Sistema::device" (?device@GD_Sistema@@2PAVIrrlichtDevice@irr@@A) sin resolver
1>gd_guibarra.obj : error LNK2001: símbolo externo "public: static int GD_Sistema::ContadorElementosGui" (?ContadorElementosGui@GD_Sistema@@2HA) sin resolver
1>.\lib\win32-visualstudio\libgdt.dll : fatal error LNK1120: 2 externos sin resolver
El único patrón común que encontré hasta ahora en esos "símbolos" es que son propiedades y están declaradas como "static". Estoy muy perdido, he cambiado opciones por todos lados y siempre obtengo lo mismo.


Si alguien de buena voluntad me puede ayudar, le puedo facilitar el código. Está en un repositorio subversion, que por windows se puede acceder fácilmente usando TortoiseSVN.

La ruta al repo svn es: https://gdt.svn.sourceforge.net/svnroot/gdt/trunk

Además agregue las librerías dependencia para evitar problemas.

EDIT:
Acá subí el paquete con todas las fuentes, proyectos, y dependencias. El enlace para descarga: http://sourceforge.net/project/downl...1.zip&64198696

Bueno si alguien desea ayudar, bienvenido, cualquier cosa sirve, una sugerencia, si conocen a alguien, si conocen otra comunidad que sepa más del tema, etc... cualquier ayuda es bienvenida.

De antemano gracias.
__________________
Blog | Tecnosquad
  #2 (permalink)  
Antiguo 02/07/2007, 21:12
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Re: Proyecto Libre GDT: Problema con el enlazador en Visual C++ 2005 Express

Pues el tipo de errores que tienes suceden cuando no estas enlazando una libreria.
Al parecer te falta enlazar la libreria irlich al proyecto. o si tu mismo creaste librerias basandote en Irlych tienes que enlazar con estas.

Creo que podrias añadir en algun encabezado lo siguiente:

Cita:
#pragma comment(lib, "libreria.lib");
#pragma comment(lib, "libreria2.lib);
etc...
Algo asi resolvertia tu problema siempre y cuando el archivo lib este en un directorio que visual studio tenga identificado en la parte de vc++ dirs.

Saludos
  #3 (permalink)  
Antiguo 02/07/2007, 22:34
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 22 años, 2 meses
Puntos: 4
Re: Proyecto Libre GDT: Problema con el enlazador en Visual C++ 2005 Express

En las dependencias del proyecto puse Irrlicht.lib y otras dependencias que tiene.

Y resuelve sin problemas un montón de clases que ocupan Irrlicht, solo estas 2 propiedades no las resuelve. Y lo único que relaciona los 2 errores es que son las únicas propiedades declaradas como "static".

Lo que me faltó decir es que el proyecto es un librería dinámica.
Otra cosa, una vez que hago mi dll (osea, cuando me resulte compilarlo), sale automáticamente junto con el la .lib o hay que hacerla manualmente? porque no es ninguna gracia hacer el .dll y que no se pueda enlazar con él.

Gracias por responder
__________________
Blog | Tecnosquad
  #4 (permalink)  
Antiguo 03/07/2007, 19:45
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Re: Proyecto Libre GDT: Problema con el enlazador en Visual C++ 2005 Express

Cita:
Iniciado por ArrauKano Ver Mensaje
En las dependencias del proyecto puse Irrlicht.lib y otras dependencias que tiene.

Y resuelve sin problemas un montón de clases que ocupan Irrlicht, solo estas 2 propiedades no las resuelve. Y lo único que relaciona los 2 errores es que son las únicas propiedades declaradas como "static".

Lo que me faltó decir es que el proyecto es un librería dinámica.
Otra cosa, una vez que hago mi dll (osea, cuando me resulte compilarlo), sale automáticamente junto con el la .lib o hay que hacerla manualmente? porque no es ninguna gracia hacer el .dll y que no se pueda enlazar con él.

Gracias por responder
Te salen las 2. No te preocupes.

Pues la verdad no se cual sea tu problema. Igual y es a nivel codigo y no enlazado. Checalo o postea un parte de codigo que consideres prudente.

SAludos
  #5 (permalink)  
Antiguo 03/07/2007, 23:19
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 22 años, 2 meses
Puntos: 4
Re: Proyecto Libre GDT: Problema con el enlazador en Visual C++ 2005 Express

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.
__________________
Blog | Tecnosquad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:25.