Mingw32 con SDL y SDL_TTF da error al compilar

Preguntas sobre cómo instalar bibliotecas, herramientas como entornos de programación e incluso sistemas operativos como GNU-Linux.

Mingw32 con SDL y SDL_TTF da error al compilar

Notapor lacabra25 » Vie Mar 05, 2010 5:16 pm

Hola, acabo de instalar SDL y SDL_TTF para usarlas en la compilacion cruzada con Mingw32 (Mingw32 ya lo tenia instalado). Un codigo muy sencillo (que funciona perfectamente por que ya lo he comppilado en GNU/Linux y ejecutado, al intentar compilarlo con Mingw32 no lo compila y da el siguiente error:
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/lib/libmingw32.a(main.o):(.text+0xe3): undefined reference to `_WinMain@16'
collect2: ld returned 1 exit status

Al parecer, por el texto de error, no ha sido definida la referencia a WinMain, pero yo en el codigo no tengo ninguna llamada a esa funcion, y no se donde podra estar el problema, por el texto del error parece tener que ver con libmingw32.a pero no se por que, ya que en otros casos de compilacion cruzada (en los que no hacia compilacion cruzada con SDL y SDL_TTF sino solo de codigo portable) no me daba este error.
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)

Notapor Geo » Vie Mar 05, 2010 8:23 pm

¿Puedes poner el comando que utilizas para enlazar?

Me parece que el problema es que SDL en Windows define una WinMain a partir de este prototipo (debes declarar tu función main con los parámetros):

Código: Seleccionar todo
int main( int argc, char* argv[] )

Y resuelve enlazando con SDLmain, en mis programas con MinGW uso esto en el comando para enlazar:

-lmingw32 -lSDLmain -lSDL -mwindows
La imaginación es el límite.
Visita mi blog en inglés o en español.
Geo
 
Mensajes: 244
Registrado: Jue Ago 10, 2006 3:51 am
Ubicación: México

Notapor lacabra25 » Sab Mar 06, 2010 11:27 am

Geo escribió:¿Puedes poner el comando que utilizas para enlazar?...

Antes primero esto en el comando para enlazar:
-mwindows -lSDLmain -lSDL -lSDL_ttf

Despues del error, aunque habia hecho compilacion cruzada anteriormente de codigo que funcionaba solo desde terminal (modo texto) sin usar SDL sin que diera este error, añadi la biblioteca MinGW32:
-mwindows -lSDLmain -lSDL -lSDL_ttf -lmingw32

Ahora, gracias a tu post, he conseguido encontrar el problema, al parecer SDL por algun motivo para poder enlazarla cuando es en compilacion cruzada necesita algo de la biblioteca MinGW32, y el orden de los factores al enlazar parece que si altera el producto:
-lmingw32 -lSDLmain -lSDL -lSDL_ttf -mwindows

Asi compila y enlaza sin problemas.
Geo escribió:...
Código: Seleccionar todo
int main( int argc, char* argv[] )
...

Desde hace algun tiempo, despues de conocer SDL y no solo eso, sino como el sistema pasa argumentos a los programas y como asi se pueden obtener, siempre uso ese prototipo en la funcion main, incluso cuando no uso SDL y no necesito obtener los parametros que pase el sistema.
Geo escribió:...Y resuelve enlazando con SDLmain, en mis programas con MinGW uso esto en el comando para enlazar:

-lmingw32 -lSDLmain -lSDL -mwindows

Cierto, el problema estaba en la forma de enlazar. Gracias por la ayuda Geo.
Avatar de Usuario
lacabra25
 
Mensajes: 222
Registrado: Mié Abr 02, 2008 9:45 pm
Ubicación: Tenerife (España)


Volver a Instalación de bibliotecas y herramientas

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado