Ver la versión completa : Cómo compilar para GP2X
Hola. Hoy, gracias a gente del foro de GP32x, he conseguido generar un ejecutable de GP2X que usa las SDL desde XP después de intentarlo durante muchos días y no conseguirlo, así que me ha parecido buena idea soltar aquí los pasos que he seguido. Eso sí, no tengo consola, así que no he podido probar nada en vivo, pero alguien de ese foro ha seguido los mismos pasos (para ser más exactos, yo he seguido los suyos) y parece que funciona. Edito: Ya tengo consola, y sí funciona.
Ante todo, sé programar en C/C++ y llevo un mes con SDL (ya he acabado un juego, listo para compilar para GP2X), pero no domino gcc/g++ ni los Makefile, así que algunas cosas se me escapan. Pero bueno, probando y con la ayuda de los de GP32x he conseguido algo.
Edito: En este mensaje (http://www.gp32x.com/board/index.php?showtopic=22436&view=findpost&p=304861) se explica un método más sencillo si quieres usar Makefiles.
He usado:
El DevKit (http://sourceforge.net/project/showfiles.php?group_id=114505&package_id=150769&release_id=372792) de WinterMute. Ahí se encuentran los compiladores que generan código para GP2X junto con las librerías ya compiladas para ese sistema.
Las librerías gp2xlibs (http://gp2x.org/gp2x/libs/gp2xlibs.tar.gz), en las que hay las SDL compiladas para GP2X.
El entorno de programación Dev-C++ (http://prdownloads.sourceforge.net/dev-cpp/devcpp-4.9.9.2_setup.exe).
El archivo "main.cpp" que he adjuntado.
Y aquí los pasos:
1. He programado usando la IDE Code::Blocks. Que cada uno use la que más le apetezca, aunque como al final he conseguido hacerlo funcionar desde Dev-C++ quizás sea más adecuado utilizar esta herramienta directamente, descargando las SDL para Windows.
2. He descargado el DevKit y he seguido estas instrucciones (http://www.devkitpro.org/setup.shtml) al pie de la letra (estructura de directorios y variables de entorno), excepto el primer paso en el que dice que hace falta descargar el DevKit adecuado, puesto que ya lo tengo. Al final sugiere usar el editor Programmer's Notepad para programar, pero como he dicho antes, desde Dev-C++ me ha funcionado así que no es necesario. También es necesario, como podréis leer, MinSys, sobre todo para poder ejecutar la instrucción "make" (dice que el DevKit no está pensado para CygWin).
3. He descargado las gp2xlibs y una vez descomprimidas he copiado todo lo que hay dentro de su subdirectorio "gp2xlibs/opt/local/gp2x/include" en el directorio "include" del DevKit. Lo mismo para "gp2xlibs/opt/local/gp2x/libs", que van a "libs" del DevKit.
4. He ejecutado Dev-C++ y he creado una nueva configuración de compilado. Esto es necesario para hacer que Dev-C++ ejecute el compilador adecuado. Para ello, he ido a Herramientas->Opciones del Compilador (no sé el nombre exacto en castellano puesto que yo lo tengo en catalán, pero me imagino que será algo parecido), y en la pestaña "Compilador" le he dado al signo + para crear la nueva configuración, y le he dado un nombre ("GP2X").
4.1. Para indicar a Dev-C++ qué compilador usar ("gcc" para los programas en C, y "g++" para aquellos programados en C++), he ido a la pestaña "Programas" y he hecho que el campo "gcc" apunte a "arm-linux-gcc.exe" que se encuentra en el directorio "bin" del DevKit. El campo "g++" he hecho que apunte a "arm-linux-g++.exe".
4.2. Ahora es necesario que Dev-C++ sepa dónde encontrar los ficheros de cabecera (los ".h") y las librerías (".a"). Para ello, he ido a la pestaña "Directorios" y en la subpestaña "Librerías" he suprimido las que había y he añadido la que hay en el DevKit ("PATH_DEL_DEVKIT\lib"). En la pestaña de los includes C (¿"Inclusiones C" en castellano?) he suprimido los directorios existentes y he añadido ("PATH_DEL_DEVKIT\include"). Finalmente, en "Inclusiones C++" he borrado las originales y he añadido: "PATH_DEL_DEVKIT\lib\gcc\arm-linux\4.0.2\include", "PATH_DEL_DEVKIT\include", "PATH_DEL_DEVKIT\include\c++\4.0.2\backward", "PATH_DEL_DEVKIT\include\c++\4.0.2\arm-linux" y "PATH_DEL_DEVKIT\include\c++\4.0.2". No sé si estas tres últimas son imprescindibles, pero es tal como decían por el otro foro. Si alguien quiere probar si sin ellas funciona, que nos lo explique.
4.3. He creado un nuevo proyecto en Dev-C++ (Fichero->Nuevo->Proyecto) vacio ("Empty Project"). Entonces he tenido que cambiar la configuración de compilado para que use la que he creado anteriormente (Proyecto->Opciones de Proyecto->Compilador, y en el campo "Compilador" he seleccionado "GP2X" de la lista).
4.4. He añadido el fichero "main.cpp" al proyecto.
4.5. Antes de compilar, le he dado instruciones a Dev-C++ para que utilice la librería "libSDL.a" (Proyecto->Opciones del Proyecto->Parámetros..., y en el campo "enlazador" he añadido (botón "Añade librería u objeto") los ficheros "libSDL.a" y "libSDLmain.a" que se encuentran en "PATH_DEL_DEVKIT\lib". Edito:A parte de estos dos ficheros, también es necesario añadir "-static" para que enlace SDL estáticamente.
4.6. He compilado (botón "Compila" o CTRL+F9) y me ha generado un archivo ".exe" que he renombrado a ".gpe" (genera un ".exe" porque así lo dice el Makefile que genera -"Makefile.win"-, pero yo creo que cambiándolo a ".gpe" basta.
Dejo el ".gpe" para que los pocos (os odio profundamente :)) que tengáis la consola lo probéis y confirméis si funciona o no.
Bueno, eso es todo. Espero que sea útil. Y espero también correcciones por parte de los expertos.
Ah, y como decía al principio, he acabado de programar un juego, que funciona perfectamente en Linux y Windows. La pega es que usa SDL_mixer y SDL_image y me da un montón de mensajes "undefined reference" cuando lo compilo para GP2X, a pesar de que incluyo también estas librerías en el proyecto. Ahí me he quedado de momento...
Edito: Si os compila y enlaza, pero una vez pasado a la consola no funciona, leed el apartado Developers del Wiki (http://wiki.gp2x.org/wiki/Main_Page), y en especial los subapartados Development FAQ (http://wiki.gp2x.org/wiki/Development_FAQ) y SDL FAQ (http://wiki.gp2x.org/wiki/SDL_FAQ).
También es necesario, como podréis leer, MinSys, sobre todo para poder ejecutar la instrucción "make" (dice que el DevKit no está pensado para CygWin).
Puede que con esto me acabes de salvar la vida. ;)
Aunque no acabo de entender que diferencia puede haber entre un "make" y otro puede que sea el origen de mis problemas. Había compilado para la GP2X y se lo pasé a alguien que la tenía, pero no le rulaba :(
A ver si con eso...
Ah, por cierto. GRACIAS!!!! :arriba:
Como recompensa te dejo un tutorial de make. Es el primero que me ha salido en google, pero está bastante bien (aunque no le saca todo el partido). Te aseguro que merece la pena aprender a jugar con los Makefiles ;)
http://vergil.chemistry.gatech.edu/resources/programming/c-tutorial/make.html
Puede que con esto me acabes de salvar la vida. ;)
Pues a ver si alguien consigue enlazar con SDL_mixer y SDL_image y salva la mía... :)
Aunque no acabo de entender que diferencia puede haber entre un "make" y otro puede que sea el origen de mis problemas. Había compilado para la GP2X y se lo pasé a alguien que la tenía, pero no le rulaba :(
De hecho, yo creo que las MinSys en realidad no hacen falta y que el "make" que trae Dev-C++ es suficiente...
Ah, por cierto. GRACIAS!!!! :arriba:
¡De nada! :brindis:
Por cierto, en realidad mi única intención escribiendo este mensaje es que fuera más largo que cualquiera de los de Uncanny... :) Aún así, creo que no lo conseguiré... [wei4]
muchas gracias, miq, ahora a ver si llegan cuanto antes las gp2x y se puede comprobar si funciona :arriba:
Pues a ver si alguien consigue enlazar con SDL_mixer y SDL_image y salva la mía... :)
¿le estás pasando los parámetros "-lSDL -lSDLmain" al enlazador?
¿le estás pasando los parámetros "-lSDL -lSDLmain" al enlazador?
Sí. Y -lSDL_mixer y -lSDL_image.
Por cierto, alguien ha hecho lo mismo que yo, pero para Visual C 2005 Express Edition. Está en el wiki de GP2X (http://wiki.gp2x.org/wiki/Using_Visual_C_2005_Express_Edition). No lo he probado.
Eres el amo!! :rever: :rever: :rever: :rever:
Tu tutorial me ha ido de coña, cuando vaya a recoger mi GP2X, traere mi SD con mi juego...
^MiSaTo^
29/11/2005, 23:29
Muchas gracias, yo necesitaba algo así. Podría algún alma caritativa explicarme todo esto pero para linux? (si no es mucho pedir... ;))
Eres el amo!! :rever: :rever: :rever: :rever:
Tu tutorial me ha ido de coña, cuando vaya a recoger mi GP2X, traere mi SD con mi juego...
¿Eso significa que te ha compilado bien? Me alegro si es así. Por cierto, usabas SDL únicamente o también SDL_mixer y/o SDL_image?
¿Eso significa que te ha compilado bien? Me alegro si es así. Por cierto, usabas SDL únicamente o también SDL_mixer y/o SDL_image?
Solo he usado las SDL.
No se si esta bien compliado, tambien me genera un exe.
Antes de renombrarlo me pico la curiosidad y lo intente ejecutar bajo windows, sospechaba que me daria algun error del estilo: "Esta no es una aplicacion Win32 Compatible", pero en vez de eso, se me habre una shell escribe un mensaje y se me cierra inmediatamente sin dejarme leer el mensaje, asi que abri la cmd, lo ejecuto y me dice:
Programa demasiado extenso para colocarlo en memoria...
Esto me hace dudar que funcione en la GP2X, aun asi, lo he renombrado y lo publico aqui para que alguien lo intente ejecutar.
Aun no se como hacer para use el input correspondiente de la GP2X, asi que lo mas seguro es que si funciona, no podreis mover el char...
PD: Adjunto el source. Quien tenga una GP2X que lo pruebe, plis!
Abriendolo con un editor hexadecimal lo único que te puedo decir es que efectivamente se trata de un ejecutable de Linux (cabecera ELF), aunque eso no asegura que vaya a funcionar en al GP2X.
Abriendolo con un editor hexadecimal lo único que te puedo decir es que efectivamente se trata de un ejecutable de Linux (cabecera ELF), aunque eso no asegura que vaya a funcionar en al GP2X.
Entonces pinta bien. :brindis: Windows a veces se le va la olla :loco: . Gracias por la info!
Abriendolo con un editor hexadecimal lo único que te puedo decir es que efectivamente se trata de un ejecutable de Linux (cabecera ELF), aunque eso no asegura que vaya a funcionar en al GP2X.
Buena noticia. Además, creo que ya dije que alguien lo probó y sí funcionaba. Por cierto, en este mensaje de Guyawkes (http://www.gp32x.com/board/index.php?showtopic=22436&view=findpost&p=304861) (el que está haciendo el manual de usuario de la consola) del hilo original (http://www.gp32x.com/board/index.php?showtopic=22436) en GP32x, se explica un método más sencillo. Lo que no dice es que es necesario tener un "make.exe" instalado (para ello, descargad CygWin o MinSys) y añadir el directorio donde se encuentra al PATH.
Puck2099
30/11/2005, 16:55
Muchas gracias, yo necesitaba algo así. Podría algún alma caritativa explicarme todo esto pero para linux? (si no es mucho pedir... ;))
^Misato^ en cuanto me llegue la GP2X me pondré a hacer algo similar para Linux, que ya tengo mi Samurai portado a las SDL. Tan pronto consiga que compile y se ejecute correctamente te comento :)
Por cierto, no veais lo que me está costando portar el Lady Killer a las SDL, por lo menos anoche conseguí ya que tire la intro y elección de chica [wei4]
^Misato^ en cuanto me llegue la GP2X me pondré a hacer algo similar para Linux, que ya tengo mi Samurai portado a las SDL. Tan pronto consiga que compile y se ejecute correctamente te comento :)
Olvidaba decir que las instrucciones de Guyfawkes que antes mencionaba las va añadir al manual de usuario. Supongo que en algún momento caerán también las de Linux.
Por cierto, no veais lo que me está costando portar el Lady Killer a las SDL, por lo menos anoche conseguí ya que tire la intro y elección de chica [wei4]
No conozco estos juegos. ¿Tienes algún enlace para echarle un vistazo? Por cierto, comparado con SDL, ¿era mucho más complicado usar el SDK de GP32? Lo pregunto para hacerme una idea de si el SDK de GP2X será jodido o no, aunque ya sé que no tienen por qué parecerse.
miq, has conseguido compilar con sld_image y sdl_mixer?
En todo el foro, no hay nadie que tenga ni idea de que botones son los que corresponden a los de la GP2X? (Si teneis alguna pequeña idea de donde puedo conseguir esta info, decirlo, plisss)
Yo no tengo la GP32, pero me digeron que en la GP32 se usaba el control y no se cual mas como botones de la consola.
miq, has conseguido compilar con sld_image y sdl_mixer?
Todavía no. Estoy esperando a ver si en ese foro nos sueltan algo. Por suerte o por desgracia, hay alguien más a quien también le pasa lo mismo (al final uno acaba pensando que ha hecho algo mal...).
En todo el foro, no hay nadie que tenga ni idea de que botones son los que corresponden a los de la GP2X? (Si teneis alguna pequeña idea de donde puedo conseguir esta info, decirlo, plisss)
Yo no tengo la GP32, pero me digeron que en la GP32 se usaba el control y no se cual mas como botones de la consola.
Lo encontrarás en el Wiki (http://wiki.gp2x.org/wiki/SDL_Joystick_mapping).
Lo encontrarás en el Wiki (http://wiki.gp2x.org/wiki/SDL_Joystick_mapping).
Olé. You were been "el amo" again!! :rever: :rever: :rever:
xDDDDDDDDDDD
PD: Adjunto el source. Quien tenga una GP2X que lo pruebe, plis!
Pues no va, aunque no he investigado por qué. Ahora probaré yo con un ejemplo sencillo.
Con este, ¡sí!
#include "SDL.h"
#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 240
#define SCREEN_DEPTH 8
int main(int argc, char *argv[]) {
SDL_Surface *screen;
Uint8 *p;
int x = 10; //x coordinate of our pixel
int y = 20; //y coordinate of our pixel
/* Initialize SDL */
SDL_Init(SDL_INIT_VIDEO);
/* Initialize the screen / window */
screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_DEPTH, SDL_SWSURFACE);
for(int iy = 0; iy < 10; iy++)
{
for(int ix = 0; ix < 10; ix++)
{
/* Make p point to the place we want to draw the pixel */
p = (Uint8 *)screen->pixels + (y+iy) * screen->pitch + (x+ix) * screen->format->BytesPerPixel;
/* Draw the pixel! */
*p=0xff;
}
}
/* update the screen (aka double buffering) */
SDL_Flip(screen);
while(1);
}
Ya he probado mi juego en la GP2X, y realmente, como que no va... puede que lo haya compilado mal. Si alguien lo compila en su ordena, que me lo pase a ver...
Gran GP2X! [wei4] aunque no se porque hay muchos programas que no me van... a lo mejor tengo que actualizar el firmware. No me va ni el emulata de NeoGeo CD, ni el de SNES...
Ya he probado mi juego en la GP2X, y realmente, como que no va... puede que lo haya compilado mal. Si alguien lo compila en su ordena, que me lo pase a ver...
Gran GP2X! [wei4] aunque no se porque hay muchos programas que no me van... a lo mejor tengo que actualizar el firmware. No me va ni el emulata de NeoGeo CD, ni el de SNES...
No es por dar envidia, pero mi juego, quitándole SDL_image y SDL_mixer ¡sí va! :) Eso sí, en el ordenador tira a unos 200 fps y en la consola a... 11... :( Ahora tocará optimizar.
Yo los emuladores aún no los he probado. Demasiado trabajo... :)
Puck2099
01/12/2005, 00:47
No conozco estos juegos. ¿Tienes algún enlace para echarle un vistazo? Por cierto, comparado con SDL, ¿era mucho más complicado usar el SDK de GP32? Lo pregunto para hacerme una idea de si el SDK de GP2X será jodido o no, aunque ya sé que no tienen por qué parecerse.
Pues tienes algunos screenshots en mi web, la que sale en mi firma :)
Y no, no es más complicado el SDK de la GP32 que las SDL, solo es otro concepto de hacer las cosas, algunas cosas me resultan más fáciles y otras más difíciles :)
Saludos
Pues tienes algunos screenshots en mi web, la que sale en mi firma :)
Ejem... Tu web... ¿está en venta? Parece que está dada de baja.
Y no, no es más complicado el SDK de la GP32 que las SDL, solo es otro concepto de hacer las cosas, algunas cosas me resultan más fáciles y otras más difíciles :)
Vale. Pues a ver qué pasa en un par de días cuando, si cumplen, sale el de GP2X...
Ejem... Tu web... ¿está en venta? Parece que está dada de baja.
Perdón, he ido a la que tienes en tu perfil y no a la de tu firma... El Lady Killer tiene muy buena pinta... A ver si lo pasas a GP2X y lo puedo jugar...
Puck2099
01/12/2005, 01:03
Ejem... Tu web... ¿está en venta? Parece que está dada de baja.
Joe tío, que susto me has pegado, acabo de entrar y funciona bien: http://www.gp32wip.com
Inténtalo de nuevo, please.
Joe tío, que susto me has pegado, acabo de entrar y funciona bien: http://www.gp32wip.com
Disculpa. Ya ves que al final he accedido a la correcta... :)
Oye, pues a mi no me funciona ni tu programa, esto comienza a ser raro...
Edit: Por casualidad no tendre que meter alguna libreria SDL compilada para ARM en algun lado de la SD? Porque todos los programas hechos en SDL no me funcionan, y los unicos que me funcionan son los que usan la libreria de rlyeh...
Edit2: Creo que no, me acaba de funcionar el Quake...
Oye, pues a mi no me funciona ni tu programa, esto comienza a ser raro...
Edit: Por casualidad no tendre que meter alguna libreria SDL compilada para ARM en algun lado de la SD? Porque todos los programas hechos en SDL no me funcionan, y los unicos que me funcionan son los que usan la libreria de rlyeh...
Edit2: Creo que no, me acaba de funcionar el Quake...
¿Has instalado SDL en la consola?
¿Has instalado SDL en la consola?
Ahora si, pero sigue sin funcionar...
Ahora si, pero sigue sin funcionar...
Pues ya no sé qué decirte... Prueba con la configuración tal y como explica Guyfawkes en su mensaje (está enlazado en uno mío de más arriba).
a mí tp me funciona :loco: Las sdl están instaladas, porque los emus sí que me funcionan, pero lo que he compilado yo me queda la pantalla en negro.
Tras mi frustracion de ver que no funciona mi programa, he decidio compilarlo en Linux. Asi que me he instalado el devkitARM, las librerias SDL de la GP2X, etc.
Cuando compilo, el ld me da un error:
buddy@NewTokyo:~/data/programacion/SDLGame$ /usr/devkitARM/bin/arm-elf-gcc SDLGame.c -o SDLGame.gpe -I/usr/devkitARM/include/SDL -L/usr/devkitARM/lib -Wl,-rpath,/usr/devkitARM/lib -lSDL -lm -I/usr/devkitARM/include/ -L/usr/devkitARM/arm-elf/lib
/usr/devkitARM/bin/../lib/gcc/arm-elf/4.0.2/../../../../arm-elf/bin/ld: crt0.o: No such file: No existe el fichero o el directorio
Tras leer esto, veo que el devkitARM incluye unos crt0.o pero para DS, GBA y GP32, pero para GP2X nada...
¿Habéis probado con las instrucciones de Guyfawkes?
Puck2099
02/12/2005, 06:08
Joe, yo estoy quemadísimo, llevo toda la tarde intentando compilar un "Hello World" y no he sido capaz... :(
Please, que el primero que consiga algo nos lo haga saber.
Joe, yo estoy quemadísimo, llevo toda la tarde intentando compilar un "Hello World" y no he sido capaz... :(
Please, que el primero que consiga algo nos lo haga saber.
¿En Linux o en Windows? Yo en Linux intenté algo hace ya unos días pero desistí.
Puck2099
02/12/2005, 06:22
¿En Linux o en Windows? Yo en Linux intenté algo hace ya unos días pero desistí.
En ambos, pero no hay manera...
En ambos, pero no hay manera...
¡No puede ser! :) A ver, ¿sigues las instrucciones de Guyfawkes al pie de la letra? Yo lo hice y funcionó. Bájate el miniproyecto que incluye, y tira a partir de ahí. No sé que puede tener de especial mi ordenador, o el tuyo. ¿Qué SO tienes? Yo XP. Díme qué es lo que falla a ver si yo me encontré con eso en algún momento...
Puck2099
02/12/2005, 07:24
¡No puede ser! :) A ver, ¿sigues las instrucciones de Guyfawkes al pie de la letra? Yo lo hice y funcionó. Bájate el miniproyecto que incluye, y tira a partir de ahí. No sé que puede tener de especial mi ordenador, o el tuyo. ¿Qué SO tienes? Yo XP. Díme qué es lo que falla a ver si yo me encontré con eso en algún momento...
Para lo de Guyfawkes usé un XP. En la guía no pone nada de instalar el Cygwin o similar y por eso no me encontraba el make, así que me bajé una versión compilada para Win32 del make y me daba un error que no recuerdo...
Mañana si eso lo pruebo y te digo con más detenimiento :)
Saludos
Yo uso el make de Cygwin y compilo desde Cygwin. De hecho, el código fuente del juego lo tengo metido en el "home" de mi usuario que crea este programa. Pruébalo así. Suerte.
a mí me pasa algo raro, tanto en cygwin, minsys y la consola de win, me da el mismo error:
Makefile:22: *** missing separator. Stop.
He copiado el makefile tal cual, y no sé de qué separator está hablando.
a mí me pasa algo raro, tanto en cygwin, minsys y la consola de win, me da el mismo error:
Makefile:22: *** missing separator. Stop.
He copiado el makefile tal cual, y no sé de qué separator está hablando.
Tienes razón. No lo recordaba y a mí también me pasó. De hecho tuve dos problemas con el Makefile. Antes que nada, aquí está el que uso para Tilematch (un pelín modificado respecto al de Guyfawkes, pero seguro que os será fácil ver dónde tenéis que hacer sustituciones):
CROSS_COMPILE = C:/devkitGP2X/bin/arm-linux-
SDL_BASE = C:/devkitGP2X/bin/arm-linux-
LDFLAGS = -static
CC = $(CROSS_COMPILE)gcc
CXX = $(CROSS_COMPILE)g++
STRIP = $(CROSS_COMPILE)strip
CFLAGS = `$(SDL_BASE)sdl-config --cflags` -O2 -fexpensive-optimizations -Wall
CXXFLAGS = `$(SDL_BASE)sdl-config --cflags` -O2 -fexpensive-optimizations -Wall
LIBS = `$(SDL_BASE)sdl-config --libs`
TARGET = tilematch.gpe
OBJS = Tilematch.o Cursor.o Motor.o MotorTilematch.o Peca.o Puntuacions.o Text.o
ALL_TARGETS = $(TARGET)
all: $(ALL_TARGETS)
$(TARGET): $(OBJS)
$(CXX) $(LDFLAGS) -o $(TARGET) $(OBJS) $(LIBS)
$(STRIP) $(TARGET)
Primero, tuve que hacer desaparecer las dos últimas líneas (clean: ...) porque por alguna razón no las pillaba bien. Total, hacer un "make clean" o un "rm *.o" da el mismo trabajo.
Y segundo, los Makefiles son sensibles a los tabulados. La teoría no la tengo del todo clara (buscad info sobre Makefile en Google y seguro que lo encontráis), pero lo que sí sé es que las reglas con más de una línea, a partir de la segunda se han de usar tabulados con los caracteres de tabulado y no con espacios. Lo digo porque algunos editores de texto permiten sustituir los caracteres de tabulado por espacios. Desactivad esa opción si es así. Lo podéis ver en las dos últimas líneas de mi Makefile, que están tabuladas de esa manera.
A ver si eso os ayuda.
Puck2099
02/12/2005, 22:12
Vale, ya he conseguido compilar el código de ejemplo siguiendo el método de Guyfawkes.
Solo me faltaba el hacerlo desde el propio Cygwin, ahora va todo bien.
Bueno, voy a probar mi Samurai a ver si me lo compila, lo próximo será intentar conseguir estos mismos resultados bajo Linux...
Si alguien consigue hacer un Hola Mundo desde linux q me saque de la desesperación porfavorrrrrr
Vale, ya he conseguido compilar el código de ejemplo siguiendo el método de Guyfawkes.
Solo me faltaba el hacerlo desde el propio Cygwin, ahora va todo bien.
Bueno, voy a probar mi Samurai a ver si me lo compila, lo próximo será intentar conseguir estos mismos resultados bajo Linux...
¡¡¡Por fin!!! :)
Puck2099
02/12/2005, 22:32
¡¡¡Por fin!!! :)
Sí, pero el Samurai no compila... me da un montón de warnings en una librería de Oankali y se rompe la compilación sin haber dado un error...
Voy a echarme una siesta, a ver si con la cabeza más despejada se me ocurre algo :(
Bueno, voy a probar mi Samurai a ver si me lo compila, lo próximo será intentar conseguir estos mismos resultados bajo Linux...Lo que más me jode no es probar ni los emuladores, ni ver lo videos, ni cosas así, lo que más me jode de tener que esperar unas semanas, por la opción 2 de algunos accesorios (ese cable TV...), es no poder cacharrear y poder hacer pruebas para tema de desarrollo de la GP2X en Linux :p
P.D: Ya podría ser también un accesorio el "Cable Serial Lead" de la GP2X para el tema del depurado... y un jTAG, ya puestos a pedir [wei4]
Jan_Europa
02/12/2005, 22:51
ya se que soy nuevo...
NO, no tengo la GPX2, pero eso no quita que me pique la curiosidad
Aqui va mi aportacion: ya he configurado el VC++Express y lo pilla todo, todo....
menos la SDL_Mixer / SDL_Image....
voy a probar a sobreescribir las existentes en el devkitgp2x con las de NK
!!!quien sabe!!!! [wei4]
Jan_Europa
02/12/2005, 22:54
me continuo a mi mismo:
joer, pues no sirven de na
!!hala!!
sigo intentando compilar algo que tenga SDL_Mixer.....
:canon2:
Aqui va mi aportacion: ya he configurado el VC++Express y lo pilla todo, todo....
menos la SDL_Mixer / SDL_Image....
Por favor, si lo consigues, ¡¡¡dínoslo!!!
Lo que más me jode no es probar ni los emuladores, ni ver lo videos, ni cosas así, lo que más me jode de tener que esperar unas semanas, por la opción 2 de algunos accesorios (ese cable TV...), es no poder cacharrear y poder hacer pruebas para tema de desarrollo de la GP2X en Linux :p
Estás fatal... :)
¿Cómo vais de inglés? ¿Por qué no preguntáis en GP32x? Estoy convencido de que más de un emulador o port que está disponible estará compilado en Linux... Los expertos contestan pocas veces, pero por intentarlo que no quede. Además, me suena que hay ya algún hilo sobre este tema.
A mí también se me jode si uso el SDL_mixer. A la hora de enlazar tengo estos errores:
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(mixer.o): In function `mix_channels':
mixer.c:(.text+0x7f4): undefined reference to `SDL_MixAudio'
mixer.c:(.text+0xa5c): undefined reference to `SDL_MixAudio'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(mixer.o): In function `Mix_LoadWAV_RW':
mixer.c:(.text+0x1644): undefined reference to `SDL_ReadLE32'
mixer.c:(.text+0x1700): undefined reference to `SDL_LoadWAV_RW'
mixer.c:(.text+0x1850): undefined reference to `SDL_FreeWAV'
mixer.c:(.text+0x18e4): undefined reference to `SDL_FreeWAV'
mixer.c:(.text+0x1928): undefined reference to `SDL_FreeWAV'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music.o): In function `music_mixer':
music.c:(.text+0x2c8): undefined reference to `VC_WriteBytes'
music.c:(.text+0x598): undefined reference to `VC_WriteBytes'
music.c:(.text+0x6fc): undefined reference to `SMPEG_playAudio'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music.o): In function `open_music':
music.c:(.text+0x94c): undefined reference to `MikMod_InfoDriver'
music.c:(.text+0x95c): undefined reference to `MikMod_RegisterAllDrivers'
music.c:(.text+0x960): undefined reference to `MikMod_InfoLoader'
music.c:(.text+0x970): undefined reference to `MikMod_RegisterAllLoaders'
music.c:(.text+0x978): undefined reference to `MikMod_Init'
music.c:(.text+0x994): undefined reference to `MikMod_strerror'
music.c:(.text+0xba8): undefined reference to `md_mode'
music.c:(.text+0xbbc): undefined reference to `md_mixfreq'
music.c:(.text+0xbc0): undefined reference to `md_device'
music.c:(.text+0xbc4): undefined reference to `md_volume'
music.c:(.text+0xbc8): undefined reference to `md_musicvolume'
music.c:(.text+0xbcc): undefined reference to `md_sndfxvolume'
music.c:(.text+0xbd0): undefined reference to `md_pansep'
music.c:(.text+0xbd4): undefined reference to `md_reverb'
music.c:(.text+0xbd8): undefined reference to `MikMod_errno'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music.o): In function `Mix_LoadMUS':
music.c:(.text+0x117c): undefined reference to `SMPEG_new'
music.c:(.text+0x11c0): undefined reference to `SMPEG_actualSpec'
music.c:(.text+0x11e0): undefined reference to `Player_Load'
music.c:(.text+0x120c): undefined reference to `MikMod_strerror'
music.c:(.text+0x1300): undefined reference to `MikMod_errno'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music.o): In function `Mix_FreeMusic':
music.c:(.text+0x13e0): undefined reference to `Player_Free'
music.c:(.text+0x142c): undefined reference to `SMPEG_delete'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music.o): In function `music_internal_play':
music.c:(.text+0x1574): undefined reference to `Player_Start'
music.c:(.text+0x15c8): undefined reference to `SMPEG_enableaudio'
music.c:(.text+0x15dc): undefined reference to `SMPEG_enablevideo'
music.c:(.text+0x15f0): undefined reference to `SMPEG_play'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music.o): In function `music_internal_position':
music.c:(.text+0x18dc): undefined reference to `Player_SetPosition'
music.c:(.text+0x194c): undefined reference to `SMPEG_skip'
music.c:(.text+0x1964): undefined reference to `SMPEG_rewind'
music.c:(.text+0x1978): undefined reference to `SMPEG_play'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music.o): In function `music_internal_volume':
music.c:(.text+0x1ae4): undefined reference to `Player_SetVolume'
music.c:(.text+0x1b94): undefined reference to `SMPEG_setvolume'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music.o): In function `music_internal_halt':
music.c:(.text+0x1ca8): undefined reference to `Player_Stop'
music.c:(.text+0x1cf0): undefined reference to `SMPEG_stop'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music.o): In function `music_internal_playing':
music.c:(.text+0x1f6c): undefined reference to `Player_Active'
music.c:(.text+0x1ff0): undefined reference to `SMPEG_status'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music.o): In function `Mix_SetSynchroValue':
music.c:(.text+0x220c): undefined reference to `Player_Active'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music.o): In function `Mix_GetSynchroValue':
music.c:(.text+0x22b0): undefined reference to `Player_Active'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music.o): In function `close_music':
music.c:(.text+0x231c): undefined reference to `MikMod_Exit'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music.o): In function `MikMod_LoadSongRW':
music.c:(.text+0x2640): undefined reference to `Player_LoadGeneric'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music.o): In function `Mix_LoadMUS_RW':
music.c:(.text+0x27e8): undefined reference to `MikMod_strerror'
music.c:(.text+0x284c): undefined reference to `MikMod_errno'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music_ogg.o): In function `OGG_new':
music_ogg.c:(.text+0x12c): undefined reference to `ov_open'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music_ogg.o): In function `OGG_new_RW':
music_ogg.c:(.text+0x360): undefined reference to `ov_open_callbacks'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music_ogg.o): In function `OGG_getsome':
music_ogg.c:(.text+0x484): undefined reference to `ov_read'
music_ogg.c:(.text+0x508): undefined reference to `ov_info'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music_ogg.o): In function `OGG_playAudio':
music_ogg.c:(.text+0x764): undefined reference to `SDL_MixAudio'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music_ogg.o): In function `OGG_delete':
music_ogg.c:(.text+0x850): undefined reference to `ov_clear'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(music_ogg.o): In function `OGG_jump_to_time':
music_ogg.c:(.text+0x890): undefined reference to `ov_time_seek'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(wavestream.o): In function `WAVStream_PlaySome':
wavestream.c:(.text+0x4c8): undefined reference to `SDL_MixAudio'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(wavestream.o): In function `ReadChunk':
wavestream.c:(.text+0x650): undefined reference to `SDL_ReadLE32'
wavestream.c:(.text+0x664): undefined reference to `SDL_ReadLE32'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(wavestream.o): In function `LoadWAVStream':
wavestream.c:(.text+0x7f4): undefined reference to `SDL_ReadLE32'
wavestream.c:(.text+0x804): undefined reference to `SDL_ReadLE32'
wavestream.c:(.text+0x814): undefined reference to `SDL_ReadLE32'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(wavestream.o):wavestream.c:(.te xt+0xd00): more undefined references to `SDL_ReadLE32' follow
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(wavestream.o): In function `LoadAIFFStream':
wavestream.c:(.text+0xd10): undefined reference to `SDL_ReadBE32'
wavestream.c:(.text+0xd20): undefined reference to `SDL_ReadLE32'
wavestream.c:(.text+0xd74): undefined reference to `SDL_ReadLE32'
wavestream.c:(.text+0xd84): undefined reference to `SDL_ReadBE32'
wavestream.c:(.text+0xe04): undefined reference to `SDL_ReadBE32'
wavestream.c:(.text+0xe14): undefined reference to `SDL_ReadBE32'
wavestream.c:(.text+0xe68): undefined reference to `SDL_ReadBE16'
wavestream.c:(.text+0xe78): undefined reference to `SDL_ReadBE32'
wavestream.c:(.text+0xe88): undefined reference to `SDL_ReadBE16'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(load_aiff.o): In function `Mix_LoadAIFF_RW':
load_aiff.c:(.text+0x160): undefined reference to `SDL_ReadLE32'
load_aiff.c:(.text+0x170): undefined reference to `SDL_ReadBE32'
load_aiff.c:(.text+0x1ac): undefined reference to `SDL_ReadLE32'
load_aiff.c:(.text+0x220): undefined reference to `SDL_ReadLE32'
load_aiff.c:(.text+0x230): undefined reference to `SDL_ReadBE32'
load_aiff.c:(.text+0x2e4): undefined reference to `SDL_ReadBE32'
load_aiff.c:(.text+0x2f4): undefined reference to `SDL_ReadBE32'
load_aiff.c:(.text+0x340): undefined reference to `SDL_ReadBE16'
load_aiff.c:(.text+0x350): undefined reference to `SDL_ReadBE32'
load_aiff.c:(.text+0x360): undefined reference to `SDL_ReadBE16'
load_aiff.c:(.text+0x3d0): undefined reference to `SDL_ReadBE32'
load_aiff.c:(.text+0x3d8): undefined reference to `SDL_ReadBE32'
load_aiff.c:(.text+0x3e0): undefined reference to `SDL_ReadBE32'
load_aiff.c:(.text+0x3e8): undefined reference to `SDL_ReadBE16'
c:/devkitpro/devkitgp2x/lib\libSDL_mixer.a(load_ogg.o): In function `Mix_LoadOGG_RW':
load_ogg.c:(.text+0x224): undefined reference to `ov_open_callbacks'
load_ogg.c:(.text+0x254): undefined reference to `ov_info'
load_ogg.c:(.text+0x308): undefined reference to `ov_pcm_total'
load_ogg.c:(.text+0x3c4): undefined reference to `ov_read'
load_ogg.c:(.text+0x440): undefined reference to `ov_read'
load_ogg.c:(.text+0x460): undefined reference to `ov_clear'
A ver si hay alguien por ahí con un libSDL_mixer.a en condiciones
bueno, he conseguido compilar el ejemplo que pusiste [wei4] Sale la pantalla negra, con un cuadradito blanco en la esquina superior izquierda, y un puntero que no se puede mover.
Lo que no he conseguido hacer rular son imagenes. He puesto el siguiente código:
#include "sdl/SDL.h"
int main(int argc, char *argv[]) {
SDL_Surface *screen, *imagen;
/* Initialize SDL */
SDL_Init(SDL_INIT_VIDEO);
/* Initialize the screen / window */
screen = SDL_SetVideoMode(320, 250, 16, SDL_HWSURFACE | SDL_DOUBLEBUF);
imagen=SDL_LoadBMP ("tortuga.bmp");
SDL_BlitSurface (imagen, NULL, screen, NULL);
/* update the screen (aka double buffering) */
SDL_Flip(screen);
SDL_Delay (5000);
return 0;
}
al compilar no me da errores, pero la pantalla se me queda negra. Sabéis dónde puede estar el fallo? La ruta de las imágenes cómo se pone, en modo "absoluto" o relativo?
bueno, he conseguido compilar el ejemplo que pusiste [wei4] Sale la pantalla negra, con un cuadradito blanco en la esquina superior izquierda, y un puntero que no se puede mover.
Entonces te funciona bien. :)
Lo que no he conseguido hacer rular son imagenes.
1. Asegúrate de que la imagen está en la misma carpeta que el ejecutable (puesto que no pones ningún path al cargarla en tu código).
2. En el Wiki (http://wiki.gp2x.org/wiki/SDL_Issues) hay una lista de modos de pantalla que funcionan. Tu caso no aparece, así que... Ah, y la resolución en Y ha de ser 240 y no 250 como has escrito... :) Prueba con la que he puesto yo en el juego (creo que SDL_FULLSCREEN no hace falta):
screen = SDL_SetVideoMode(320, 240, 16, SDL_SWSURFACE|SDL_FULLSCREEN);
Jan_Europa
02/12/2005, 23:59
A ver si hay alguien por ahí con un libSDL_mixer.a en condiciones
me veo instalando el cywin, el gcc, el compiladro cruzado de arm para
compilar el sdl_mixer.... :ametra: :ametra:
y todo porque ya se me han inflado las pelotas :musico: y hasta que me de algo lo voy
a seguir intentando
además, al ir metiendo librerias estáticamente los ejecutables van quedando más y más
grandes :arriba:
Entonces te funciona bien. :)
1. Asegúrate de que la imagen está en la misma carpeta que el ejecutable (puesto que no pones ningún path al cargarla en tu código).
2. En el Wiki (http://wiki.gp2x.org/wiki/SDL_Issues) hay una lista de modos de pantalla que funcionan. Tu caso no aparece, así que... Ah, y la resolución en Y ha de ser 240 y no 250 como has escrito... :) Prueba con la que he puesto yo en el juego (creo que SDL_FULLSCREEN no hace falta):
screen = SDL_SetVideoMode(320, 240, 16, SDL_SWSURFACE|SDL_FULLSCREEN);
Gracias, qué ida de olla lo del 250 [wei4], ahora lo pruebo
Funciona !!!!!!
Ahora he probado con un programita que tenía para dibujar tiles, mover el personaje, escenario, etc. (que no funciona pq no he implementado los botones de la consola [wei4] ), y lo dibuja bien, pero sale un cursor de ratón arriba a la izquierda. Sabéis cómo se quita?
Ahora he probado con un programita que tenía para dibujar tiles, mover el personaje, escenario, etc. (que no funciona pq no he implementado los botones de la consola [wei4] ), y lo dibuja bien, pero sale un cursor de ratón arriba a la izquierda. Sabéis cómo se quita?
SDL_ShowCursor(SDL_DISABLE);
Puck2099
03/12/2005, 01:20
Funciona !!!!!!
Ahora he probado con un programita que tenía para dibujar tiles, mover el personaje, escenario, etc. (que no funciona pq no he implementado los botones de la consola [wei4] ), y lo dibuja bien, pero sale un cursor de ratón arriba a la izquierda. Sabéis cómo se quita?
¿Te funciona usando una HWSURFACE y DOBLBUFFER? Creo haber leído que no eran compatibles con la GP2X...
¿Te funciona usando una HWSURFACE y DOBLBUFFER? Creo haber leído que no eran compatibles con la GP2X...
No, precisamente cuando he puesto swsurface me ha funcionado [wei4] . Creo que el doublebufer sí funciona, pero no lo he probado.
Volviendo a lo de SDL_mixer, alguien en el foro de GP32x ha explicado cómo enlazar con ella. Los que trabajéis tal como explicó Guyfawkes, cambiad la línea LIBS por
LIBS = -LC:/devkitGP2X/lib -lSDLmain -lSDL_mixer -lsmpeg -lvorbisfile -lpthread -lvorbis -logg -lmikmod -lSDL
sustituyendo -LC:/devkitGP2X/lib por el path donde tengáis las librerías de SDL.
Yo lo he probado y compila a pesar de un warning, pero no funciona. Para probar, sólo he llamado a Mix_OpenAudio, pero se queda en pantalla oscura.
¡Gracias miq01! ahora si compila, aunque he tenido que añadir -lm y -lstdc++
He compilado el port que hice del interlogic para la GP32. Supongo que los controles no funcionarán porque no he cambiado nada, pero si sale la pantalla de presentación y se escucha la música, significará que todo ha ido bien :)
Que alguien con una gp2x lo pruebe, por favor.
murciegalo
04/12/2005, 12:03
¡Gracias miq01! ahora si compila, aunque he tenido que añadir -lm y -lstdc++
He compilado el port que hice del interlogic para la GP32. Supongo que los controles no funcionarán porque no he cambiado nada, pero si sale la pantalla de presentación y se escucha la música, significará que todo ha ido bien :)
Que alguien con una gp2x lo pruebe, por favor.
En mi GP2X se queda pantalla en negro y no sale absolutamente nada ni se oye nada :(
Saludos!
En mi GP2X se queda pantalla en negro y no sale absolutamente nada ni se oye nada :(
Saludos!
Pues entonces le pasa lo mismo que a miq01 :(
Pues entonces le pasa lo mismo que a miq01 :(
Pues sí, exactamente lo mismo... :( Bueno, seguro que en pocos días alguien da con la solución.
Bien, tras algunos dias sin interné, hoy me puesto al dia en casa de mi primo.
He conseguido rular mi programa, :brindis: pero ahora hay un problem: ¿Como hago para que cuando se cierre el programa, se vuelva a poner el menu principal?
PD: Pa quien quiera probarlo (no se puede considerar juego aun) lo pongo adjuntado...
otra cosa, los sprites los he pillao de un juego con copyright (Little Fighter 2), es el modelo q usaban los developers para hacer pruebas, asi q no redistribuir, plis.
¿Como hago para que cuando se cierre el programa, se vuelva a poner el menu principal?
Lo puedes hacer creando un script que ejecute tu juego y luego cargue el menú principal, o desde dentro del código, tal como lo he hecho en Tilematch, que para mi gusto queda más limpio. En tu programa principal, incluye
#include <unistd.h>
y al final, antes de salir
chdir("/usr/gp2x");
execl("/usr/gp2x/gp2xmenu", "/usr/gp2x/gp2xmenu", NULL);
Lo saqué del Wiki (http://wiki.gp2x.org/wiki/Development_FAQ).
PD: Pa quien quiera probarlo (no se puede considerar juego aun) lo pongo adjuntado...
Mola mucho el movimiento del personaje, y la animación sprite...
Hay un resumen de todo en mi thread xD a ver si lo poneis fijo y vamos añadiendo cosas.
http://www.gp32spain.com/foros/showthread.php?t=24970
Lo puedes hacer creando un script que ejecute tu juego y luego cargue el menú principal, o desde dentro del código, tal como lo he hecho en Tilematch, que para mi gusto queda más limpio. En tu programa principal, incluye
#include <unistd.h>
y al final, antes de salir
chdir("/usr/gp2x");
execl("/usr/gp2x/gp2xmenu", "/usr/gp2x/gp2xmenu", NULL);
Lo saqué del Wiki (http://wiki.gp2x.org/wiki/Development_FAQ).
Mola mucho el movimiento del personaje, y la animación sprite...
Bueno, no hace falta que te diga que eres el amo porque ya lo sabes ;).
Casi todas las soluciones a mis dudas estan en ese wiki, xDDDD.
Ahora tendre que arreglar cosillas de mi juego, el motor fisico esta un poco warro... :P (Es mi primer juego q he hecho y mi primer programa que supera las 500 lineas de codigo, xDDD)
Tengo una duda...
He creado una funcion, y le he dicho a atexit() que la ejecute cuando salga, pero la duda es que cuando llame a la funcion execl("/usr/gp2x/gp2xmenu", "/usr/gp2x/gp2xmenu", NULL);, se ejecutara el menu, pero mi juego permenezera de fondo hasta que la aplicacion menu se cierre, no?
Buenas a todos, ya sé que el hilo ha derivado un poco en otra cosa, pero a quien pueda interesar, he probado el método del Visual C++ 2005 Express y me ha compilado a la primera y ha funcionado en la GP2X, si señor, todo mu sencillito y sin complicaciones :D Lo único extra que hay que hacer y no pone en el tutorial es añadir las sdl, que no lo pone explicitamente pero dice donde hay que ponerlas, jeje, así que ahora toca codear [wei4]
A ver si porto un par de juegos que tenía por ahí de la GP32 que nunca publiqué :brindis:
Saludos,
Nuria.
Buenas noticias, Nuria. Si por algún casual consigues enlazar con SDL_Mixer y que funcione, avisa, ¿vale?
Puck2099
07/12/2005, 07:12
Buenas noticias, Nuria. Si por algún casual consigues enlazar con SDL_Mixer y que funcione, avisa, ¿vale?
Ya nos ha pasado Woogal la librería en el hilo donde le preguntamos, he creado un nuevo hilo (http://www.gp32spain.com/foros/showthread.php?t=25116) para tratar el tema.
Saludos
Hola! Ya me he leído el post entero, ahora voy con algunas preguntas que me han surgido por el camino:
1.- ¿Qué son, o mejor preguntado, para qué sirven los famosos sdl_mixer y sdl_image? (he conocido las SDL hace poco, no me peguéis :) )
2.- Al final, ¿qué resulta más fácil? Estaba a punto de ponerme a instalar el Dev-C++ y hacer todo lo que pone en el primer mensaje, pero acaban de decir que en VisualC es más fácil...
3.- ¿En qué lenguaje programáis los que decís que tenéis tal o cual juego? C o C++?
3-b- Llevo unos días leyendo muchas cosas sobre la consola, mi conclusión es la siguiente y si me equivoco por favor me corregís para enterarme: las SDL son librerías sólo para C / C++, y por otro lado me parece que, de hecho, sólo hay compiladores para esos lenguajes. Compilar en Windows es medianamente posible, pero en linux se están teniendo bastantes dificultades (lo que por cierto me parece ilógico, lo primero que se me ocurriría con una consola así es que los problemas se tenganen windows).
Ale, saludos!
Voy a ir instalando el Dev-c++ para hacer contacto con eso de las sdl :chupete:
Puck2099
08/12/2005, 06:52
Hola! Ya me he leído el post entero, ahora voy con algunas preguntas que me han surgido por el camino:
1.- ¿Qué son, o mejor preguntado, para qué sirven los famosos sdl_mixer y sdl_image? (he conocido las SDL hace poco, no me peguéis :) )
SDL_Mixer: Librería para reproducir archivos de música (Wav, Mod, etc.)
SDL_Image: Librería para mostrar imágenes distintas de BMP (JPEG, PNG, etc.) y funciones de carga de imágenes de memoria.
2.- Al final, ¿qué resulta más fácil? Estaba a punto de ponerme a instalar el Dev-C++ y hacer todo lo que pone en el primer mensaje, pero acaban de decir que en VisualC es más fácil...
Ni idea en esto, yo uso Linux.
3.- ¿En qué lenguaje programáis los que decís que tenéis tal o cual juego? C o C++?
Yo en C, pero supongo que también se puede hacer en C++ sin problemas. Lo mio es porque estoy más cómodo sin usar objetos, clases y tal.
3-b- Llevo unos días leyendo muchas cosas sobre la consola, mi conclusión es la siguiente y si me equivoco por favor me corregís para enterarme: las SDL son librerías sólo para C / C++, y por otro lado me parece que, de hecho, sólo hay compiladores para esos lenguajes. Compilar en Windows es medianamente posible, pero en linux se están teniendo bastantes dificultades (lo que por cierto me parece ilógico, lo primero que se me ocurriría con una consola así es que los problemas se tenganen windows).
Creo que hay modos de usarlas en otros lenguajes, pero para la GP2X me parece que solo podemos usar C/C++, ensamblador y luego los lenguajes de script que están portando como el Python.
En Linux no se está teniendo ninguna dificultad, es más, yo lo veo más fácil que en Windows ;)
Saludos
Buenas, daesir.
1.- ¿Qué son, o mejor preguntado, para qué sirven los famosos sdl_mixer y sdl_image? (he conocido las SDL hace poco, no me peguéis :) )
SDL_mixer y SDL_image son librerías que añaden funcionalidades que SDL no tiene (o que, si las tiene, son complicadas de implementar). Échale un vistazo a su documentación en sus páginas web (SDL_mixer (http://www.libsdl.org/projects/SDL_mixer/), SDL_image (http://www.libsdl.org/projects/SDL_image/)). A grandes rasgos, y ten en cuenta que yo llevo uno o dos meses con ellas y por lo tanto no soy ningún experto en el tema:
SDL_image da la posibilidad de cargar otros formatos de imágenes (PNG, GIF, JPG, y otros no tan conocidos), a parte de BMP que ya soporta SDL,
SDL_mixer permite añadir sonido fácilmente a tus aplicaciones, a partir de archivos OGG, MP3, WAV y otros.
2.- Al final, ¿qué resulta más fácil? Estaba a punto de ponerme a instalar el Dev-C++ y hacer todo lo que pone en el primer mensaje, pero acaban de decir que en VisualC es más fácil...
Primero, lo del primer mensaje ha ido cambiando con los días y ahora todo resulta un poco más sencillo. Si trabajas desde Windows, mírate este mensaje (http://www.gp32x.com/board/index.php?showtopic=22436&view=findpost&p=304861). Ahí se explica de modo más sencillo. Respecto a lo de Dev-C++ o Visual Studio (Express Edition 2005), esto va a gustos. Se puede trabajar con los dos, así que yo te diría que pruebes con uno y otro y decidas por ti mismo. Si tienes algo de experiencia con uno de los dos, me quedaría con él. Parece que tanto uno como otro permiten generar código para GP2X. Otra opción es a pelo, con un Makefile, que es como lo hago yo ahora.
3.- ¿En qué lenguaje programáis los que decís que tenéis tal o cual juego? C o C++?
Unos en C, y otros en C++, supongo. Yo, en concreto, uso C++. Si no sabes ni uno ni otro, yo de ti empezaría por C.
3-b- Llevo unos días leyendo muchas cosas sobre la consola, mi conclusión es la siguiente y si me equivoco por favor me corregís para enterarme: las SDL son librerías sólo para C / C++, y por otro lado me parece que, de hecho, sólo hay compiladores para esos lenguajes. Compilar en Windows es medianamente posible, pero en linux se están teniendo bastantes dificultades (lo que por cierto me parece ilógico, lo primero que se me ocurriría con una consola así es que los problemas se tenganen windows).
Sí. SDL se puede usar desde C o desde C++. Y creo que sí, que sólo hay compiladores para C y C++, pero también hay intérprete de Python. De hecho, ahora me viene a la cabeza que creo que también se puede usar SDL desde Python.
Edito: Mientras reviso la respuesta, veo que Puck2099 se me ha avanzado... :) Pero bueno, como ya lo tengo escrito lo envío también.
Pues Muchas muchas Gracias, dudas 100% resueltas. Lo de C o C++, es porque yo sólo conozco el primero :rolleyes: y quería hacerme una idea de si se usa o no. Ya veo que sí.
Como sugerencia, miq01, podrías poner en el primer post el link que me pasaste y una nota o algo de que, como dices, el proceso se ha facilitado en los últimos días. Por si pasa alguien y se lía a hacer los pasos pensando que es la mejor manera.
Me repito: muchas gracias a los 2 :musico:
Voy a ponerme a leer el código del spout :) y a ver si trasteo algo en los próximos días.
Un saludo
Como sugerencia, miq01, podrías poner en el primer post el link que me pasaste y una nota o algo de que, como dices, el proceso se ha facilitado en los últimos días. Por si pasa alguien y se lía a hacer los pasos pensando que es la mejor manera.
Buena idea. Hecho.
Wenas! Itentando ejecutar un sudoku ke he programado con SDL, la GP2X me devuelve esta salida:
./Sudoku.gpe: /lib/libc.so.6: version 'GLIBC_2.3' not found (required by ./Sudoku.gpe)
Mi experiencia en programar para Linux (y menos aún haciéndolo desde Windows) es nula, así ke no tengo demasiada idea de cómo solucionar eso. Por si sirve de algo, uso Dev-Cpp con el devkitGP2X.
Una ayudita ^^U ?
EDIT: Nada, antes lo digo y antes lo soluciono. Como sospechaba, tenia ke compilar estáticamente, pero no sabia cómo :P Ahora me dice
Segmentation fault (SDL Parachute Deployed)
SDL_SYS_JoystickInit
... a seguir investigando ;P
EDIT2: Ok, solucionado también el segfault ese. Estaba intentando cargar imágenes inexistentes... Ya me funciona pues :)
vizales77
12/12/2005, 13:09
Por mas que leo sigo sin enterarme de como programar para la gp2x en windows... está el primer mensaje de éste hilo y el enlace que dais al foro en ingles, pero no sé cual es mas fácil, porque no entiendo lo de los makefiles...
1. he bajado el devkit e instalado en c:\devkitGP2X
2. he añadido a éste directorio el gp2xlibs.tar.gz (de forma que "rellena" carpetas con mas cosas)
3. He renombrado 'C:\devkitGP2X\bin\arm-open2x-linux-sdl-config' a 'arm-linux-sdl-config'.
4. Abro'C:\devkitGP2X\bin\arm-linux-sdl-config' y cambio
prefix=/opt/local/gp2x
por
C:/devkitGP2X
5. he copiado el makefile de aqui (http://www.gp32x.com/board/index.php?showtopic=22436&st=15&p=304861&#entry304861)
6. he bajado el dev-c++
¿y ahora que?
No podria alguien comprimir todo ya hecho y compartirlo? jejeje
Saludos terricolas.
charlyBaby
12/12/2005, 17:35
Antes de nada muchas gracias por este tutorial de compilación y por guiarme un poco en la iniciación a la programación en GP2X.
He seguidoel tutorial de miq01 al pie de la letra y me ha compilado perfectamente, sin embargo, cuando ejecuto el ejecutable que me genera en la GP2X, se me queda la pantalla en negro y no sale el cursor. No entiendo que pasa ya que he seguido los pasos tal cual están descritos.
¿Os ha pasado también a vosotros?
has instalado las sdl en la consola? Para probarlo, intenta ejecutar algún emu de nk.
Puck2099
12/12/2005, 17:55
has instalado las sdl en la consola? Para probarlo, intenta ejecutar algún emu de nk.
No hace falta, siguiendo estos tutorial está compilándolo con las SDL de forma estática, van incluídas dentro del propio código del juego.
Saludos
charlyBaby
12/12/2005, 19:00
Sí que instale las SDL en la consola a través del menu de Utilidades, se me quedó un poco la pantalla en negro y luego volvió a salir el menú. He probado los emuladores de NEoGeoCD, SNES, el de Megadrive, la versión LadyKiller que puso puck para que la viesemos como iba y todo me ha ido bien, por lo que entiendo que dichas librerías se me instalaron sin problemas.
¿y ahora que?
Si trabajas con Dev-C++, ahora has de continuar con el 4º paso del primer mensaje, es decir, has de configurar Dev-C++ para que utilice el compilador adecuado (y no el que viene por defecto), y apunte a las librerías y los archivos de cabecera adecuados.
Antes de nada muchas gracias por este tutorial de compilación y por guiarme un poco en la iniciación a la programación en GP2X.
He seguidoel tutorial de miq01 al pie de la letra y me ha compilado perfectamente, sin embargo, cuando ejecuto el ejecutable que me genera en la GP2X, se me queda la pantalla en negro y no sale el cursor. No entiendo que pasa ya que he seguido los pasos tal cual están descritos.
¿Os ha pasado también a vosotros?
Uf, pueden pasar muchas cosas. Si ya pretendes usar el joystick, aquí (http://wiki.gp2x.org/wiki/SDL_Joystick_mapping) te explica cómo inicializarlo. Vigila también cómo inicializas la pantalla (más información, aquí (http://wiki.gp2x.org/wiki/SDL_FAQ) -apartado Unpredicted crashes at startup-). Y en cualquier caso, asegúrate de que funciona bien en el sistema operativo en el que trabajas antes de pasarlo a la consola.
Y como dice Puck2099, las SDL están enlazadas estáticamente, así que no es necesario que estén instaladas (y si lo están, no pasa nada).
charlyBaby
12/12/2005, 20:59
De momento solo trato de que funcione bien el Ejemplo main.c que pusiste en el hilo; una vez que vea que soy capaz de compilar algo para la GP2X me pondré a desarrollar mi propio juego. Estoy desarrollando empleando Windows XP Professional Service Pack 2 y no sé de que forma puedo probar el ejecutable que me genera el dev-c++ para GP2X en Windows al no haber un emulador de GP2X del estilo del geepee para GP32. ¿cómo lo hacéis vosotros?
De momento solo trato de que funcione bien el Ejemplo main.c que pusiste en el hilo; una vez que vea que soy capaz de compilar algo para la GP2X me pondré a desarrollar mi propio juego. Estoy desarrollando empleando Windows XP Professional Service Pack 2 y no sé de que forma puedo probar el ejecutable que me genera el dev-c++ para GP2X en Windows al no haber un emulador de GP2X del estilo del geepee para GP32. ¿cómo lo hacéis vosotros?
Pasándolo a la consola. Que yo sepa, es la única manera. Pero bueno, puedes programar teniendo en cuenta las características de la consola (resolución sobre todo, y qué librerías hay disponibles) y ir probando en tu XP. Así lo hice yo con Tilematch, que lo tenía acabado antes de tener la consola, y salvo introducir pequeños cambios y soporte para joystick, funcionó.
vizales77
13/12/2005, 13:04
De momento solo trato de que funcione bien el Ejemplo main.c que pusiste en el hilo; una vez que vea que soy capaz de compilar algo para la GP2X me pondré a desarrollar mi propio juego. Estoy desarrollando empleando Windows XP Professional Service Pack 2 y no sé de que forma puedo probar el ejecutable que me genera el dev-c++ para GP2X en Windows al no haber un emulador de GP2X del estilo del geepee para GP32. ¿cómo lo hacéis vosotros?
Yo aún no he conseguido que funcione, me pasa justo lo mismo que tu, siguiendo los pasos de miq01, pero aunque me genera el exe, al cambiarle la extensión y probar con gpe y gpu solo veo la pantalla negra (y se cuelga la consola). He cambiado el make, porque creo que eso no lo comenta miq01 en el tutorial, pero algo me debe faltar....
Estoy pensando en ponerme con fenix y esperar que alguien lo porte para la gp2x...
snif, snif
PD: ¿usando las minimal library podria programar sin necesidad de todos los anteriores pasos? ¿como?
charlyBaby
13/12/2005, 15:21
La verdad es que es raro lo que nos pasa, no entiendo el por qué no nos funciona. Voy a probar a instalarme un linux en una máquina virtual vmware para ver si desde linux los ejecutables me funcionan, si veo algún avance te lo haré saber...
He instalado todo siguiendo las instrucciones de miq01, pero metiendo el main.cpp de ejemplo que colgó no consigo que me tire... compila bien, pero no debería poder ejecutarse tanto en el ordenador como en la consola (pasándolo a .gpe esto último)?? Es que en la consola se queda la pantalla negra, y en el ordenata sale una ventanita que desaparece ipso-facto.
Lo hago desde Windows XP con el Dev-C++ y siguiendo los pasos al pie de la letra, a menos que se me haya escapado algo...
Edito: Creo que en la ventanita que sale al ejecutar en windows sale un mensajito, pero como que en medio segundo no da tiempo a leer nada.
charlyBaby
13/12/2005, 19:01
Te pasa exáctamente lo mismo que a mi y a vizales77, en windows XP puedes ver el mensaje que te da de error ejecutándolo desde la consola. El error es algo de la memoria, no me acuerdo exáctamente, pero es normal que no funcione ya que está compilado con el compilador y las librerías del Kit de la GP2X para su arquitectura; sin embargo sí que debería funcionar en la GP2x y no lo estamos consiguiendolo...
sin embargo sí que debería funcionar en la GP2x y no lo estamos consiguiendolo...
Ahí está el tema, que compilando y pasando el ejecutable con su respectiva extensión a la GP debería tirar, al menos estando todo bien instalado y las librerías y demás bien enlazadas, que creo que sí... pero se queda la pantalla negra.
Wild[Kyo]
13/12/2005, 19:08
Claro, el archivo que compilais no lo podreis ver en Windows. Solo lo podeis ejecutar en la GP2X. Para ejecutarlo en windows lo tendriais que compilar con el compilador normal y las SDL de PC.
guilleml
13/12/2005, 19:18
']Claro, el archivo que compilais no lo podreis ver en Windows. Solo lo podeis ejecutar en la GP2X. Para ejecutarlo en windows lo tendriais que compilar con el compilador normal y las SDL de PC.
Si, pero lo que supongo que les pasa es lo mismo que a mi, compilamos un simple código con el devkit de la gp2x y las sdl de la gp2x, renombramos el ejecutable a .gpe y al ejecutarlo en la gp2x no funciona, sólo sale la pantalla negra y no se ejecuta nada del código.
Supongo que es lo mismo que si tratas de compilar algo de arm en tu pc, que te dice que no puede, pues supongo que no se ha compilado o linkado correctamente para la gp2x y se queda la pantalla negra porque no puede ejecutar el ejecutable.
No tenéis alguna solución a lo que nos puede pasar?
Si, pero lo que supongo que les pasa es lo mismo que a mi, compilamos un simple código con el devkit de la gp2x y las sdl de la gp2x, renombramos el ejecutable a .gpe y al ejecutarlo en la gp2x no funciona, sólo sale la pantalla negra y no se ejecuta nada del código.
Supongo que es lo mismo que si tratas de compilar algo de arm en tu pc, que te dice que no puede, pues supongo que no se ha compilado o linkado correctamente para la gp2x y se queda la pantalla negra porque no puede ejecutar el ejecutable.
No tenéis alguna solución a lo que nos puede pasar?
A mi me pasaba eso al principio, lo solucione poniendo en las opciones del enlazador "-static".
Os puede ayudar a saber lo ke falla si ejecutais el programa desde un script de linux como éste:
./TuPrograma.gpe 3 > out.txt 2>&1
Lo podreis ejecutar desde el menú de juegos si le poneis la extensión .gpe, o desde utilidades si le poneis .gpu.
Tanto los mensajes de SDL como vuestros printf (esparcidos por vuestro código de forma estratégica), kedarán reflejados en el archivo out.txt. Con eso podreis depurar de una forma más eficiente.
charlyBaby
13/12/2005, 21:09
OK, buena idea. Lo probaré esta noche y os cuento.Gracias.
Os puede ayudar a saber lo ke falla si ejecutais el programa desde un script de linux como éste:
./TuPrograma.gpe 3 > out.txt 2>&1
Lo podreis ejecutar desde el menú de juegos si le poneis la extensión .gpe, o desde utilidades si le poneis .gpu.
Tanto los mensajes de SDL como vuestros printf (esparcidos por vuestro código de forma estratégica), kedarán reflejados en el archivo out.txt. Con eso podreis depurar de una forma más eficiente.
Ese sistema es el que empleaba hasta hace poco. El problema que tiene es que, al menos a mí, si el programa petaba por un segmentation fault o similar, no se pintaba en el archivo out.txt
En estos casos lo mejor es ejecutarlo directamente desde el sterm. Aunque si el programa llega a cambiar el modo gráfico y luego retornas al menú... te quedarás sin ver la salida :)
El problema que tiene es que, al menos a mí, si el programa petaba por un segmentation fault o similar, no se pintaba en el archivo out.txt
Ese comando también redirecciona la salida en stderr (2>), así ke los segfaults también entran.
vizales77
13/12/2005, 21:54
A mi me pasaba eso al principio, lo solucione poniendo en las opciones del enlazador "-static".
sigue sin funcionar :llorosa:
edito: Ya me funciona!!! oeooeoeoeeooeoe
charlyBaby
14/12/2005, 03:39
Lo consegui!!! :musico:
El motivo por el que no funciona es que no tenía puesto el -static
Lo que tenéis que hacer es tras seguir el tutorial de miq01 poneros encima del proyecto, dáis al botón derecho y os salen las "Opciones de Proyecto". En la pestaña de parámetros en la ventana de Linker añadis a parte de
../devkitGP2X/lib/libSDL.a
../devkitGP2X/lib/libSDLmain.a
-static
A mi me sale el path relativo pero tenéis que poner la libSDL y la libSDLmain de donde tengáis instalado el devkitGP2X.
El main que yo tengo es:
#include "SDL/SDL.h"
#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 240
#define SCREEN_DEPTH 8
int main(int argc, char *argv[]) {
SDL_Surface *screen;
Uint8 *p;
int x = 10; //x coordinate of our pixel
int y = 20; //y coordinate of our pixel
/* Initialize SDL */
SDL_Init(SDL_INIT_VIDEO);
/* Initialize the screen / window */
screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_DEPTH, SDL_SWSURFACE);
for(int iy = 0; iy < 10; iy++)
{
for(int ix = 0; ix < 10; ix++)
{
/* Make p point to the place we want to draw the pixel */
p = (Uint8 *)screen->pixels + (y+iy) * screen->pitch + (x+ix) * screen->format->BytesPerPixel;
/* Draw the pixel! */
*p=0xff;
}
}
/* update the screen (aka double buffering) */
SDL_Flip(screen);
while(1);
}
Y el ejecutable me ocupa:
824 KB (844.367 bytes)
A ver si hay suerte!
Un saludo.
El motivo por el que no funciona es que no tenía puesto el -static
Gracias por informar. Lo acabo de añadir al primer mensaje. Ah, y ¡felicidades! ¿A que hace ilusión la primera vez que ves un programa tuyo en la consola? :)
guilleml
14/12/2005, 04:30
Lo consegui!!! :musico:
El motivo por el que no funciona es que no tenía puesto el -static
Lo que tenéis que hacer es tras seguir el tutorial de miq01 poneros encima del proyecto, dáis al botón derecho y os salen las "Opciones de Proyecto". En la pestaña de parámetros en la ventana de Linker añadis a parte de
../devkitGP2X/lib/libSDL.a
../devkitGP2X/lib/libSDLmain.a
-static
A mi me sale el path relativo pero tenéis que poner la libSDL y la libSDLmain de donde tengáis instalado el devkitGP2X.
El main que yo tengo es:
#include "SDL/SDL.h"
#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 240
#define SCREEN_DEPTH 8
int main(int argc, char *argv[]) {
SDL_Surface *screen;
Uint8 *p;
int x = 10; //x coordinate of our pixel
int y = 20; //y coordinate of our pixel
/* Initialize SDL */
SDL_Init(SDL_INIT_VIDEO);
/* Initialize the screen / window */
screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_DEPTH, SDL_SWSURFACE);
for(int iy = 0; iy < 10; iy++)
{
for(int ix = 0; ix < 10; ix++)
{
/* Make p point to the place we want to draw the pixel */
p = (Uint8 *)screen->pixels + (y+iy) * screen->pitch + (x+ix) * screen->format->BytesPerPixel;
/* Draw the pixel! */
*p=0xff;
}
}
/* update the screen (aka double buffering) */
SDL_Flip(screen);
while(1);
}
Y el ejecutable me ocupa:
824 KB (844.367 bytes)
A ver si hay suerte!
Un saludo.
*****, 824KB, casi 1Mb, excesivo, no? me ha salido eso también, gracias, pero madre mía, menudo ejecutable para lo que tiene.
Wild[Kyo]
14/12/2005, 04:32
Juer, si que ocupa! Mi pong ocupa 800 Kbs (que ya es mucho) pero son unas 300 lineas de código...
guilleml
14/12/2005, 04:34
']Juer, si que ocupa! Mi pong ocupa 800 Kbs (que ya es mucho) pero son unas 300 lineas de código...
Hombre, ocupa tanto, supongo, porque está linkado como estático, de forma que a partir de ese momento, la diferencia entre 1 y 300 líneas de código puede ser mínima ya que lo "gordo" ya está puesto.
Aún así, me parece bastante grande.
Wild[Kyo]
14/12/2005, 04:37
Tambien es verdad...pero lo que me extraña es que lo mio ocupe menos incluso que lo suyo (300 lineas de codigo el programa principal + cabezeras + archivos de apoyo).
charlyBaby
14/12/2005, 04:44
Ocupa tanto porque el linkado con las librerias es estático, ahora mismo he metido todas las librerías en el linkado como estáticas para probar diversos métodos y me están saliendo ejecutables de 1,2Mb.... habrá que pulir pero de momento para probar vale :)
Puck2099
14/12/2005, 04:46
Ocupa tanto porque el linkado con las librerias es estático, ahora mismo he metido todas las librerías en el linkado como estáticas para probar diversos métodos y me están saliendo ejecutables de 1,2Mb.... habrá que pulir pero de momento para probar vale :)
De todas formas, ahora tenemos SDs de 1 GB, no las "pequeñas" SMC de 128 MB, así que tampoco es tan drástico que ocupe unos cuantos megas, ¿no?
Mi Lady Killer ocupa unos 7 MB y no tiene todavía sonidos...
Saludos
Wild[Kyo]
14/12/2005, 04:52
De todas formas, ahora tenemos SDs de 1 GB, no las "pequeñas" SMC de 128 MB, así que tampoco es tan drástico que ocupe unos cuantos megas, ¿no?
Mi Lady Killer ocupa unos 7 MB y no tiene todavía sonidos...
Saludos
A mi como si ocupa 20 MB siempre y cuando tenga las mismas tipas jamonas :D (Molaria algo de movimiento como bonificacion...pequeños videos hentai... XD Ya seria la repanocha :D).
Ocupa tanto porque el linkado con las librerias es estático, ahora mismo he metido todas las librerías en el linkado como estáticas para probar diversos métodos y me están saliendo ejecutables de 1,2Mb.... habrá que pulir pero de momento para probar vale :)
En una tarjeta de 1 GB puedes meter más de 800 copias de esos ejecutables tranquilamente... :D
Si se le pasa al enlazador la opción "-Wl, --as-needed" te enlaza sólo con las librerias que realmente hacen falta, y no te enlaza con otras librerias como hace por defecto. Depende de la versión de binutils usada, supongo que si la versión que se usa no tiene soporte dará error.
Si se le pasa al enlazador la opción "-Wl, --as-needed" te enlaza sólo con las librerias que realmente hacen falta, y no te enlaza con otras librerias como hace por defecto. Depende de la versión de binutils usada, supongo que si la versión que se usa no tiene soporte dará error.
Acabo de probarlo con el DevKit para Windows y no acepta esas opciones.
No se si también sirve para Linux, pero para Windows existen compresores de ejecutables, como UPX. Leí por ahi ke habia algo para GP2X... o puede ke lo soñara. Con eso consigues ke un ejecutable ocupe como un 70% menos, según mis experiencias, y no hace falta descomprimirlo para ejecutarlo.
Puck2099
14/12/2005, 06:10
No se si también sirve para Linux, pero para Windows existen compresores de ejecutables, como UPX. Leí por ahi ke habia algo para GP2X... o puede ke lo soñara. Con eso consigues ke un ejecutable ocupe como un 70% menos, según mis experiencias, y no hace falta descomprimirlo para ejecutarlo.
Rlyeh tiene un compresor de ejecutables en su web. Lo malo es que, por lo menos en mi LK, tarda un huevo en cargar el juego...
guilleml
14/12/2005, 06:14
Rlyeh tiene un compresor de ejecutables en su web. Lo malo es que, por lo menos en mi LK, tarda un huevo en cargar el juego...
Si funciona igual que los compresores de windows, lo que hace es comprimir el ejecutable, crea otro con un descompresor y añade el código comprimido, de forma que cuando se ejecuta, lo primero va el descompresor, decodifica el ejecutable y ya lo carga.
Ese proceso es bastante pesado de procesamiento.
No, yo no hablo de autodescompresores. Probadlo vosotros mismos (http://upx.sourceforge.net/) :P Podeis comprimir cualkier ejecutable.
EDIT: Humm leyendo en esa página parece ke efectivamente, descomprime en la RAM cuando ejecutas...
D_Skywalk
14/12/2005, 15:04
No he leido todo el tema, no se si alguien lo ha sugerido ya pero...
¿Habeis probado a usar strip?
Y una cosa mas, que opinais de intentar usar las libs que vienen dentro de la gp? tenemos sdl mixer y demas todos compilados y preparados para la gp2x :) Podiamos intentar usarlos a ver que pasa, quizas se nos quiten todos los problemas de un plumazo :D
Un Saludo :)
Puck2099
14/12/2005, 15:08
Y una cosa mas, que opinais de intentar usar las libs que vienen dentro de la gp? tenemos sdl mixer y demas todos compilados y preparados para la gp2x :) Podiamos intentar usarlos a ver que pasa, quizas se nos quiten todos los problemas de un plumazo :D
Un Saludo :)
Lo que pasa es que es una versión antigua creo que compiladas con gcc 2.95 (al menos ese era el gcc que proporcionaba GPH con las librerías).
Saludos
D_Skywalk
14/12/2005, 15:16
Lo que pasa es que es una versión antigua creo que compiladas con gcc 2.95 (al menos ese era el gcc que proporcionaba GPH con las librerías).
Saludos
Personalmente tampoco tengo mucho problema en usar gcc 2.95 si con eso voy a ahorrarme las paranoias de las SDL que me compile yo :?
De todas formas tendriamos que preparar igual unas libsdl para gcc 2.95 ¿no? sino no podremos compilar o quizas con pillarnos los *.so de la gp2x y los includes de la version que usen seria suficiente :_D
Si esta mañana tengo un rato voy a montarme un copiador de todas las libs a la SD y pruebo el invento xD
Un Saludo
charlyBaby
14/12/2005, 15:40
Perdonad mi desconocimiento, pero ¿qué problema hay en utilizar las SDLs que vienen en el kit de desarrollo: devkitGP2X-win32.exe
Se ha visto que la SDL_mixer ya funciona, entonces ¿para qué emplear las SDLs que vienen en la consola? ¿Se gana algo con eso?
Puck2099
14/12/2005, 15:43
Perdonad mi desconocimiento, pero ¿qué problema hay en utilizar las SDLs que vienen en el kit de desarrollo: devkitGP2X-win32.exe
Se ha visto que la SDL_mixer ya funciona, entonces ¿para qué emplear las SDLs que vienen en la consola? ¿Se gana algo con eso?
¿Seguro que la SDL_mixer funciona? Si es así, ¿viene en el kit de desarrollo que mencionas?
Saludos
D_Skywalk
14/12/2005, 15:46
Perdonad mi desconocimiento, pero ¿qué problema hay en utilizar las SDLs que vienen en el kit de desarrollo: devkitGP2X-win32.exe
Se ha visto que la SDL_mixer ya funciona, entonces ¿para qué emplear las SDLs que vienen en la consola? ¿Se gana algo con eso?
Que sepa el SDL_mixer que tenemos hace fallar el Joy :?
Aparte, dentro de la GP tenemos unas librerias y cuando compilamos nosotros incluimos en nuestro ejecutable tambien esas librerias, es decir, estamos duplicandolas y quizas con usar las libs internas seria suficiente :rolleyes:
Puck, acabo de mirar el libSDL_mixer/ttf y esta compilado con GCC 3.4.4
Sin embargo, las aplicaciones como gp2xmenu si estan compiladas con 2.95.3
Si fuera asi y todas las libs de SDL estubieran compiladas con GCC 3.4.4, tendriamos ya la mitad del camino recorrido :D
Un Saludo
[EDITO]
Estoy pensando que las libs compiladas con GCC 3.4.4 sean las de NK :? De todas formas ya que estan y sabemos que funcionan tambien podiamos usarlas, no?
[EDITO BIS]
Si, son las del NK; pero si el ha usado las librerias del sistema con GCC 3.4.4 y solo ha ampliado sus libs con el mixer y el ttf... podriamos probar a ver si funciona :?
charlyBaby
14/12/2005, 15:47
Según tengo entendido por las pruebas que habéis hecho, a mi aún no me ha dado tiempo a trastear con la SDL_mixer, no funciona la SDL_mixer que venía en el kit. Pero en el hilo:
"Ya funciona el SDL_mixer" que pusiste tú mismo, encontraste que el problema se debía a la librería en cuestión que estaba mal y basta con sustituirla.
De este modo, hasta la fecha no hay más problemas detectado, ¿no es así?, por eso que a día de hoy no veo la necesidad de emplear otras SDLs.
Lo consegui!!! :musico:
El motivo por el que no funciona es que no tenía puesto el -static
Lo que tenéis que hacer es tras seguir el tutorial de miq01 poneros encima del proyecto, dáis al botón derecho y os salen las "Opciones de Proyecto". En la pestaña de parámetros en la ventana de Linker añadis a parte de
../devkitGP2X/lib/libSDL.a
../devkitGP2X/lib/libSDLmain.a
-static
A mi me sale el path relativo pero tenéis que poner la libSDL y la libSDLmain de donde tengáis instalado el devkitGP2X.
El main que yo tengo es:
[...]
Y el ejecutable me ocupa:
824 KB (844.367 bytes)
A ver si hay suerte!
Un saludo.
:rever: Gracias tío, por fin lo conseguí. Está visto que lo que me fallaba era también el "-static".
Pues qué buena, ahora podré trastear agusto con las SDL probándolas en la propia consola, y más sencillito que cuando empecé a hacerlo desde Linux sin GP2X ni nada, que me liaba un poco más.
Una preguntilla más. Para ir probando lo que vas programando sin tener que estar metiendo el programilla en la GP en cada prueba (coñazo), lo mejor es programarlo primero para el Pc y cuando funcione adaptarlo a las librerías de la GP y volverlo a compilar para sacar el .gpe que funcione (supongo que no será muy complicado pasar de una versión a otra, ¿no?). Para esto qué necesito hacer, debería instalar otro DevKit de esos como el que he puesto para la GP2X siguiendo el tutorial de Miq01 sólo que esta vez para Windows, o cómo va el tema??
Y si no es mucho abusar de vuestra paciencia, otra cuestión, es muy diferente programar en SDL para el Pc que para la GP? Que yo apenas tengo el tema empezado, me leí algún pequeño manual y llegué a rular alguna tontería en Linux (una ventanita con la resolucion de la GP2X donde aparecían imagenes pequeñas de una GP por doquier XD). Y eso, para orientarme un poco vaya.
D_Skywalk
14/12/2005, 19:17
Para ir probando lo que vas programando sin tener que estar metiendo el programilla en la GP en cada prueba (coñazo), lo mejor es programarlo primero para el Pc y cuando funcione adaptarlo a las librerías de la GP y volverlo a compilar para sacar el .gpe que funcione (supongo que no será muy complicado pasar de una versión a otra, ¿no?). Para esto qué necesito hacer, debería instalar otro DevKit de esos como el que he puesto para la GP2X siguiendo el tutorial de Miq01 sólo que esta vez para Windows, o cómo va el tema??
Te comento, yo programo en linux, y lo hago asi: Programo un modulo en el PC, cuando esta terminado testeo en GPxx si tira, vuelvo a PC, sino debug a muerte hasta que lo arreglo y vuelta a empezar :)
Es la mejor forma, asi sabes que la version actual te tira perfectamente en todas las plataformas. No obstante aunque todo sea SDL, de los tipicos #endif para hacer ciertas cosas distintas sobre una plataforma o sobre otra, no te lo quita nadie xD
Y si no es mucho abusar de vuestra paciencia, otra cuestión, es muy diferente programar en SDL para el Pc que para la GP? Que yo apenas tengo el tema empezado, me leí algún pequeño manual y llegué a rular alguna tontería en Linux (una ventanita con la resolucion de la GP2X donde aparecían imagenes pequeñas de una GP por doquier XD). Y eso, para orientarme un poco vaya.
Basicamente para GP2X necesitas rular a 16bits tanto video como sonido, luego si usas configs o ficheros que tengas que cargar creo que no puedes usar getpwd pero puedes buscar la ruta en el argv del main :)
Un Saludo y suerte :)
Pd: Un cosejillo mas para debugear en la gp2x viene de pm usar el sterm que sacaron hace unas semanas :D
T.Striker
14/01/2006, 05:59
Después de un rato por fin he conseguido compilar una aplicación, con sdl_image, para ello he tenido que volver a bajar el devkitGP2X, y he añadido a la sección "proyecto/opciones del proyecto/argumentos/" las siguientes librerias contenidas en el directorio lib de devkitGP2X :
devkitGP2X/lib/libSDL_image.a -static
devkitGP2X/lib/libSDLmain.a -static
devkitGP2X/lib/libSDL.a -static
devkitGP2X/lib/libjpeg.a -static
devkitGP2X/lib/libpng.a -static
devkitGP2X/lib/libz.a -static
Después he compilado una aplicación que me ha pasado un amigo, y no me ha dado problemas, pero la aplicación me sigue fallando a la hora de ejecutarla, y creo que es por que no he sido capaz de añadir las imagenes al archivo compilado, he intentado añadirlas con un directorio junto con el archivo gpe, pero ni con esas, así que si alguien sabe como puedo añadir dichas imagenes a la compilación se lo agradecería.
No tienes ke añadirlas al ejecutable. Será más fácil cargarlas desde fuera, pero asegúrate de ke le pasas la ruta correcta.
Offtopic: ke mania teneis todos de llamar librerias a las bibliotecas xD
No tienes ke añadirlas al ejecutable. Será más fácil cargarlas desde fuera, pero asegúrate de ke le pasas la ruta correcta.
Exacto. Lo que puedes hacer es meter un printf con un mensaje de error en el caso de que no te cargue bien la imagen (creo que se puede saber mirando si IMG_Load te devuelve o no NULL) y redireccionar la salida estándar a fichero. De todas maneras, si es por eso que falla, debería pasarte exactamente lo mismo compilándolo para tu máquina.
Offtopic: ke mania teneis todos de llamar librerias a las bibliotecas xD
Yo creo que con eso poco podemos hacer. Se ha cogido esa costumbre y ya está. Yo sé que debería llamarlas "bibliotecas", pero aún así me sale "librerías".
Por cierto, Tomo, sigo descojonándome con la cita de Padre de Familia en tu firma... :D
T.Striker
14/01/2006, 16:34
Pues al final, lo que estaba mal era la ruta ,me faltaba el "./" delante de la ruta, pero una vez que cambie eso, compile carge el juego en mi gp2x, junto con el directorio con las imagenes y funcionaba perfectamente.
Remarco la importancia de bajarse el devkitGP2X de nuevo, ya que la primera versión que yo me baje no tenía el archivo "arm-open2x-linux-sdl-config" y creo que era por eso por lo que no mi compilaba con sdl_image.
De todas maneras, si es por eso que falla, debería pasarte exactamente lo mismo compilándolo para tu máquina.Yo no pondría la mano en el fuego. A mi me pasó ke, con un código defectuoso, en PC ni se inmutaba al intentar cargar imágenes inexistentes. Simplemente continuaba tal cual. Pero en GP2X salía con el típico parachute ese de SDL. No aseguro ke fuera por eso, tampoco. Kizás era simplemente un char* mal usado, pero en PC no daba error :P
Por cierto, Tomo, sigo descojonándome con la cita de Padre de Familia en tu firma... :DxDDDDD
Edit PD: ke redundante me ha kedado lo de "ese de SDL".
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions Inc. All rights reserved.