| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
dadel
Registrado: 17 Sep 2007 Mensajes: 4
| Publicado: 17/09/2007 1:25 pm | | | Título: Errores de linkado con el ddraw, en vc++ y dev c++ |
| Hola, he estao aprendiendo a programar con directx y vc++, pero a la hora de linkar me da estos problemas:
Linking... game.obj : error LNK2001: unresolved external symbol _DirectDrawCreate@12 LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main Debug/game.exe : fatal error LNK1120: 2 unresolved externals Error executing link.exe.
game.exe - 3 error(s), 0 warning(s)
He estao investigando por la red y he encontrao solucion para el error del ddraw, pero me suiguen fallando los otros dos!!! Alguien sabe como solucionarlos??
Tambien e probao ,en el dev c++. Con el, el error de synbol_main no me lo da, pero no se solucionar mi problemita con el ddraw ni el otro mensaje. Logicamente tambien me vale una solucion que se utilizara en este compilador.
por ultimo queria decir que me a parecido leer en una web (que lo leyera es otra cosa) que el error de symbol_main es porke no uso main(), sin embargo la mia es una aplicacion de consola y el uso del Winmain esta perfecto, asique en resumen........ que alguien me ayude!!!!!!!!!!!!!!!  |
|
| Volver arriba | |
 |
daltomi
Registrado: 28 Abr 2007 Mensajes: 114 Ubicación: Argentina
| Publicado: 17/09/2007 1:51 pm | | | Título: |
| | dadel escribió: | | sin embargo la mia es una aplicacion de consola y el uso del Winmain esta perfecto |
Pues no es correcto, la entrada del programa en un proyecto "Console" es int main(...), en cambio en un proyecto "Win32" es int APIENTRY WinMain(..). Creo que también no estás vinculando la libreria ddraw.lib al proyecto. Mirá, un proyecto Win32 Application, en la versión 6.0 de VC++ quedaría asi:
| Código: | #include "stdafx.h"
#include <ddraw.h>
//Menu: Project-> Settings-> solapa Links... // o manualmente asi: #pragma comment(lib,"ddraw.lib")
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { return 0; }
|
Saludos. |
|
| Volver arriba | |
 |
dadel
Registrado: 17 Sep 2007 Mensajes: 4
| Publicado: 18/09/2007 6:01 am | | | Título: Gracias pero... |
| Gracias pora aclaracion, pero aqui llegamos al meollo del problema.
La primera solucion sobre el ddraw me a ayudado, a eliminar el error "undefined reference to `DirectDrawCreate@12' " en el vc++, pero no en el dev c++.
Por contra, la segunda me a aclarado las ideas y ayudado a encontrar la funcion WinMain que SI esta en el codigo y que el VC++ NO reconoce mientras que el dev-c++ SI.
Aqui tienes esa parte del codigo:
| Código: | int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) { MSG msg;
lpCmdLine = lpCmdLine; hPrevInstance = hPrevInstance;
//En caso de que fallara la inicializacion, se retorna FALSE. if( !doInit( hInstance, nCmdShow ) ) { return FALSE; } |
Este pedazo de codigo es copiado, y por lo tanto no tengo la capacidad de revisarlo.
Como puedes ver la cosa es, que tengo un problema que se solucionar en el visual c++ y no en el dev-c++, y otro distinto que no me sale en el dev-c++ y si en el visual c++.
Asique de nuevo tengo que pedir que aportes un poquito de luz a todo esto!! jeje.
[/code] |
|
| Volver arriba | |
 |
|
cheroky
Registrado: 22 Sep 2005 Mensajes: 1372 Ubicación: En ecx esperando un call
| Publicado: 18/09/2007 6:32 am | | | Título: |
| La convencion de llamada para el entri point (main) es WINAPI que es lo mismo que la llamda estandar __stdcall. Un main tipico:
| Código: | int WINAPI WinMain (HINSTANCE hTh, HINSTANCE hPr, LPSTR lps, int n) { /* */
return 0; } |
Esto deberia de funcionar en cualquier compilador windows.
S2. _________________ - Explícito es mejor que implícito. - Simple es mejor que complejo. - Complejo es mejor que complicado. - Plano es mejor que anidado. - Ralo es mejor que denso. |
|
| Volver arriba | |
 |
dadel
Registrado: 17 Sep 2007 Mensajes: 4
| Publicado: 18/09/2007 7:12 am | | | Título: |
| Pues parece que a mi compilador (visual c++ 6) le gusta llevar la contraria,jeje, porque asi me sigue dando:
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main Debug/game.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe.
Es un fallo del compilador o que????
Ultima edición por dadel el 18/09/2007 10:59 am; editado 1 vez |
|
| Volver arriba | |
 |
cheroky
Registrado: 22 Sep 2005 Mensajes: 1372 Ubicación: En ecx esperando un call
| Publicado: 18/09/2007 7:36 am | | | Título: |
| A ver si podemos hacer algo. 1) Que sea un proyecto para windows. 2) En las opciones de proyecto elimina el flag precompiled headers 3) Revisa los path (rutas de las librerias necesarias). 4) Dependencias del linker, esto es incluir las librerias necesarias al proyecto. 5) Tomarse un cervecilla e intentarlo en otro momento.
S2. _________________ - Explícito es mejor que implícito. - Simple es mejor que complejo. - Complejo es mejor que complicado. - Plano es mejor que anidado. - Ralo es mejor que denso. |
|
| Volver arriba | |
 |
|
daltomi
Registrado: 28 Abr 2007 Mensajes: 114 Ubicación: Argentina
| Publicado: 18/09/2007 7:40 am | | | Título: Re: Gracias pero... |
| | dadel escribió: | La primera solucion sobre el ddraw me a ayudado, a eliminar el error "undefined reference to `DirectDrawCreate@12' " en el vc++, pero no en el dev c++.
| Claro, porque en el Dev-C++ la libreria se titula libddraw.a, además el comando #pragma.... es propio del MSVC. No tengo mucha práctica en el entorno Dev-C++, asi que deberás buscar como enlazar las librerias. Sobre el APIENTRY y WINAPI, otra vez tiene que ver con el entorno. Estas, convenciones de llamadas como aclara cheroky, se escriben automáticamente al crear un proyecto. Además en Dev-C++ incluye el 'header' <windows.h> directamente en el módulo principal, mientras que en VC++ dicho 'header' se encuentra en 'stdafx.h' ya que utiliza 'Precompiled Headers', aunque no siempre debe ser asi.Todo esto según versión 6.0, desconozco las posteriores.
Saludos. |
|
| Volver arriba | |
 |
daltomi
Registrado: 28 Abr 2007 Mensajes: 114 Ubicación: Argentina
| Publicado: 18/09/2007 8:01 am | | | Título: |
| Vamos paso a paso: 1. Inicia Visual C++(v.6.0). 2. Menu File->New..solapa Projects...selecionas Win32 Application, titulo cualquiera. 3.En la ventana que aparece seleciona:'A simple Win32 Application' 4. No compiles(v.Compilar), debes hacer esto: Menu Build-> Rebuild All. Eso no debería dar ningun error: '0 error(s), 0 warning(s)'
Saludos. |
|
| Volver arriba | |
 |
dadel
Registrado: 17 Sep 2007 Mensajes: 4
| Publicado: 18/09/2007 10:47 am | | | Título: |
| | Sobre lo tuyo daltomi, he seguido todo paso a paso y todo perfecto. Ningun problema. 0 errores 0 warnings |
|
| Volver arriba | |
 |
|
|