Retroceder   Foros del Web > Temas generales de computación > Programación > C/C++

Respuesta
 
Herramientas Desplegado
Antiguo 02-jul-2007, 14:50   #1 (permalink)
ArrauKano está en el buen camino
 
Avatar de ArrauKano
 
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 649
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.
ArrauKano está desconectado   Responder Citando
Antiguo 02-jul-2007, 21:12   #2 (permalink)
Instru está en el buen camino
 
Avatar de Instru
 
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.442
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
__________________
Usa las putas faqs:
http://www.forosdelweb.com/showthread.php?t=264647
Instru está desconectado   Responder Citando
Antiguo 02-jul-2007, 22:34   #3 (permalink)
ArrauKano está en el buen camino
 
Avatar de ArrauKano
 
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 649
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
ArrauKano está desconectado   Responder Citando
Antiguo 03-jul-2007, 19:45   #4 (permalink)
Instru está en el buen camino
 
Avatar de Instru
 
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.442
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
__________________
Usa las putas faqs:
http://www.forosdelweb.com/showthread.php?t=264647
Instru está desconectado   Responder Citando
Antiguo 03-jul-2007, 23:19   #5 (permalink)
ArrauKano está en el buen camino
 
Avatar de ArrauKano
 
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 649
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.
ArrauKano está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 15:39.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93