Ver la versión completa : Compilando para Wiz en Ubuntu
Antes de nada me presento y tol tema :)
Ahora que ya estoy presentado vayamos al meollo del asunto: acaba de llegarme la wiz y he aprovechado una pequeña pausa entre los exámenes para "meterle mano". El caso, he estado intentando compilar algunos de mis juegos en SDL para verlos funcionar (ligeramente modificados) en la wiz. (Todo esto en Ubuntu)
He seguido las instrucciones oficiales:
-Descomprimí el tar del SDK en la carpeta OPT, como administrador.
-Programé un HelloWorld para la ocasión, lo guardé como HelloWorld.c
-LLamé al compilador desde la terminal /opt/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-gcc -o helloworld.gpe HelloWorld.c
Esto tuvo como resultado un archivo .gpe que se puede ejecutar en la wiz.
Sin embargo, no he sido capaz de compilar códigos fuente que usan SDL:
/opt/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-gcc HelloWorldSDL.c -I /usr/include/SDL -lSDL -o HelloWorldSDL.gpe
/opt/arm-openwiz-linux-gnu/bin/../lib/gcc/arm-openwiz-linux-gnu/4.2.4/../../../../arm-openwiz-linux-gnu/bin/ld: cannot find -lSDL
Ese es el error que me da. Supongo que no le sirve la SDL que uso para compilar en ubuntu y por eso dice que no encuentra la librería. Si este es el caso, ¿está la librería en el toolchain? ¿donde?
En resumidas cuentas y para gran vergüenza mía, ¿alguien me dice como demonios se compila una aplicación que usa SDL para la wiz? xDD
Los de GPH podían tener el "tacto" de incluir todo lo necesario en ese minicd que trae la máquina, que tan desperdiciado está. Porque así sólo se dificulta la labor de programar y portar... y no creo que eso beneficie a nadie.
^MiSaTo^
10/09/2009, 21:14
Antes de nada me presento y tol tema :)
Ahora que ya estoy presentado vayamos al meollo del asunto: acaba de llegarme la wiz y he aprovechado una pequeña pausa entre los exámenes para "meterle mano". El caso, he estado intentando compilar algunos de mis juegos en SDL para verlos funcionar (ligeramente modificados) en la wiz. (Todo esto en Ubuntu)
He seguido las instrucciones oficiales:
-Descomprimí el tar del SDK en la carpeta OPT, como administrador.
-Programé un HelloWorld para la ocasión, lo guardé como HelloWorld.c
-LLamé al compilador desde la terminal /opt/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-gcc -o helloworld.gpe HelloWorld.c
Esto tuvo como resultado un archivo .gpe que se puede ejecutar en la wiz.
Sin embargo, no he sido capaz de compilar códigos fuente que usan SDL:
/opt/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-gcc HelloWorldSDL.c -I /usr/include/SDL -lSDL -o HelloWorldSDL.gpe
/opt/arm-openwiz-linux-gnu/bin/../lib/gcc/arm-openwiz-linux-gnu/4.2.4/../../../../arm-openwiz-linux-gnu/bin/ld: cannot find -lSDL
Ese es el error que me da. Supongo que no le sirve la SDL que uso para compilar en ubuntu y por eso dice que no encuentra la librería. Si este es el caso, ¿está la librería en el toolchain? ¿donde?
En resumidas cuentas y para gran vergüenza mía, ¿alguien me dice como demonios se compila una aplicación que usa SDL para la wiz? xDD
Los de GPH podían tener el "tacto" de incluir todo lo necesario en ese minicd que trae la máquina, que tan desperdiciado está. Porque así sólo se dificulta la labor de programar y portar... y no creo que eso beneficie a nadie.
Efectivamente el problema está en la ruta a las SDL. Ahí le estás diciendo que compile con las SDL de tu PC /usr/lib/sdl y deberías darle la ruta de la toolchain (que no la se porque ahora mismo no la tengo instalada).
Si me das un ratín que la instalo, te paso un makefile dual (pc y wiz) ;)
¿En tu caso no los tendrás en /opt/arm-openwiz-linux-gnu/lib?
^MiSaTo^
10/09/2009, 21:34
Te pego mi makefile "dual" (está hecho una caca porque uso uno de gp2x que hice hace tiempo xDDD)
Eso sí, al compilar me está dando un error en las SDL rarro rarro:
warning: libiconv.so.2, needed by /toolchain/arm-openwiz-linux-gnu/lib/libSDL.so, not found (try using -rpath or -rpath-link)
/toolchain/arm-openwiz-linux-gnu/lib/libSDL.so: undefined reference to `libiconv'
/toolchain/arm-openwiz-linux-gnu/lib/libSDL.so: undefined reference to `libiconv_close'
/toolchain/arm-openwiz-linux-gnu/lib/libSDL.so: undefined reference to `libiconv_open'
Pero bueno si te sirve de algo, te adjunto el makefile (quitale el .txt que se lo he puesto porque no me dejaba subirlo sino). En TARGET pon el nombre de lo que quieras hacer y en OBJS los fuentes de tu proyecto.
Ah y si es c deberías cambiar CXX por CC ;) Por lo demás debería valerte
He puesto el directorio que me indicaste:
/opt/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-gcc sdl.c -I /opt/arm-openwiz-linux-gnu/lib -lSDL -o HelloWorldSDL.gpe
sdl.c:1:17: error: SDL.h: No such file or directory
...pero parece que ahora falla el include!:confused:
< - >
Muchas gracias Misato! Ahora pruebo el makefile y ya te digo...
^MiSaTo^
10/09/2009, 21:40
Muchas gracias Misato! Ahora pruebo el makefile y ya te digo...
Ya te digo que a mi me da ese error (con y sin makefile XDDD) no se muy bien por qué, ya que el archivo sí está.
Y bueno creo que voy a retocar algo ese makefile porque está hecho mierda, pero al menos puedes ver las rutas correctas.
La toolchain debe estar instalada en /toolchain (si es la de openwiz) y debe tener un link simbolico en /opt/openwiz/toolchain o eso pone en el archivo de la zona de descargas.
Pos nada, he reinstalado el toolchain como me dijiste, cambié el makefile para que se adaptara al nombre de mi fuente pero el compilador sigue en sus tercios:
g++ -o sdl sdl.c -lSDL -lSDL_image
sdl.c:1:17: error: SDL.h: No existe el fichero ó directorio
Y además intuyo que ese comando no es el que debería hacer el make...
En fin esto requerirá su tiempo... para alguien inexperto en linux como yo conllevará ciertos "tirones de pelos":D
^MiSaTo^
10/09/2009, 22:55
cuando incluyes las SDL, lo haces con #include <SDL.h>? porque hay que incluirlo como (creo)
#include <SDL/SDL.h> a mi si lo hago sin poner SDL delante, me dice que no encuentra SDL.h ;)
Mi ma... vaya fallo jajajajajaj
Pos aora si que compila el make, lo más gracioso del asunto es que me sale un ejecutable de ubuntu y no de wiz!!
Sigo trasteando, al final tendrá que funcionar ¿no? xD
EDITO:
make wiz
/toolchain/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-g++ -I/toolchain/arm-openwiz-linux-gnu/include -L/toolchain/arm-openwiz-linux-gnu/lib -lSDL -o sdl.gpe sdl.c
sdl.c:1:21: error: SDL/SDL.h: No such file or directory
Curioso que vaya la compilación "normal" pero para wiz no!
< - >
REEDITO:
Problema arreglado... era mi cosa de mi toolchain que lo bajé de otra web y le faltaban archivos (capullos xD)
Sin embargo ahora me da el error que mencionas tu arriba y no me construye el ejecutable xD Si lo arreglo te aviso...
^MiSaTo^
11/09/2009, 01:34
Mi ma... vaya fallo jajajajajaj
Pos aora si que compila el make, lo más gracioso del asunto es que me sale un ejecutable de ubuntu y no de wiz!!
Sigo trasteando, al final tendrá que funcionar ¿no? xD
EDITO:
make wiz
/toolchain/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-g++ -I/toolchain/arm-openwiz-linux-gnu/include -L/toolchain/arm-openwiz-linux-gnu/lib -lSDL -o sdl.gpe sdl.c
sdl.c:1:21: error: SDL/SDL.h: No such file or directory
Curioso que vaya la compilación "normal" pero para wiz no!
< - >
REEDITO:
Problema arreglado... era mi cosa de mi toolchain que lo bajé de otra web y le faltaban archivos (capullos xD)
Sin embargo ahora me da el error que mencionas tu arriba y no me construye el ejecutable xD Si lo arreglo te aviso...
Te lo agradezco porque llevo un buen tiempo así y no consigo ver qué falla xDD
SplinterGU
11/09/2009, 03:36
tenes que setear un par de variables de enviromment y alguna que otra cosa mas... fijate como hice yo con el emu de spectrum o con bennu...
Mmmm yo tuve que relinkar un directorio lib dentro de /toolchain/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu/lib a /toolchain/arm-openwiz-linux-gnu/lib que realmente creo que apuntaba a /usr/lib o algo así, cuando pase por casa te lo miro
< - >
Bueno, prueba de compilar poniendo las librerías hacia -L/toolchain/lib creo que con tu estructura de carpetas funcionará... por cierto, si te crea un ejecutable linux que no funciona en linux seguramente es que te lo ha compilado para wiz, ejecutalo llamandolo desde un gpe o un gpu en la wiz y te funcionará
Nada, linkar hacia el directorio que indica hopez sigue produciendo un error:
/toolchain/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-g++ -I/toolchain/arm-openwiz-linux-gnu/include -L/toolchain/lib -lSDL -o sdl.gpe sdl.c
/toolchain/arm-openwiz-linux-gnu/lib/gcc/arm-openwiz-linux-gnu/4.2.4/../../../../arm-openwiz-linux-gnu/bin/ld: cannot find -lSDL
collect2: ld returned 1 exit status
En este caso se queja de que no encuentra la librería SDL, en lugar de decir que hay una llamada no resuelta a libiconv...
^MiSaTo^
11/09/2009, 12:09
Sí eso también lo intenté yo (lo de /toolchain/lib) pero tampoco me funcionó xDDD
Lo curioso es que dice que no encuentra libiconv pero está en el mismo directorio que libsdl...
Bueno, siento no haber podido arreglar la compilación "manual" con destino gpe para wiz, sin embargo voy dejar aquí otra alternativa de compilación en Linux (que al menos funciona en ubuntu).
1- Instalad el paquete codeblocks (lo buscais en el synaptics, clic derecho instalar, aplicar cambios).
2- Abrís el codeblocks, vais a settings, tab compiler and debugger.
3- Seleccionais el GNU GCC compiler y presionais el botón Copy.
4- Os pide un nombre. Le llamaremos DevKit Gp2xWiz.
5- Ahora vamos a configurar los directorios, vamos a la tab Search Directories.
6- En la subtab compiler usamos el botón add para añadir los directorios:
/toolchain/arm-openwiz-linux-gnu/arm-openwiz-linux-gnu/include
/toolchain/arm-openwiz-linux-gnu/include
7- En la subtab linker usamos el botón add para añadir:
/toolchain/arm-openwiz-linux-gnu/lib
8- Ahora nos cambiamos a la tab Linker Settings y añadimos en el panel derecho:
-static -lSDL_gfx -lSDL_ttf -lfreetype -lSDL_image -ljpeg -lpng12 -lz -lSDL_mixer -lvorbisidec -lmikmod -lmad -lSDL -lgcc -lm -lc -lexpat -lpthread -msoft-float
9- Finalmente, iremos a la tab Toolchain executables.
10- En compiler's installation directory ponemos:
/toolchain/arm-openwiz-linux-gnu
11- Abajo en cada compilador ponemos por ejemplo para C:
arm-openwiz-linux-gnu-gcc
12- Para los dos siguientes:
arm-openwiz-linux-gnu-g++
13- Para el cuarto:
arm-openwiz-linux-gnu-ar
14- Los otros 3 se dejan en blanco.
15- Pulsamos ok para aceptar todos los cambios.
¡Ya tenemos configurado nuestro environment! Ahora creas un proyecto vacío, le agregas unos códigos fuentes, seleccionas el compilador del proyecto como DevKitGp2xWiz y ya te compila ejecutable para la wiz, usando todas las librerías disponibles.
También puedes configurar en configuración de proyecto el nombre de salida del ejecutable para que termine en .gpe y otras menudencias, pero lo fundamental está hecho.
Pos nada, voy testear algunas aplicaciones, hasta pronto!!
^MiSaTo^
11/09/2009, 13:14
Vale es posible que lo que falle en mi makefile sea que yo de rutas de include solo tengo la segunda que has puesto ;)
OTRAS CONSIDERACIONES:
El problema con la librería libiconv parece que era por hacer el linkeo dinámico, también se puede arreglar en la compilación manual añadiendo el parámetro -static.
El problema es que creo que compilando estáticamente no funcionan las cosas en las gp2x, no obstante todavía me falta comprobarlo.
^MiSaTo^
11/09/2009, 13:20
La madre que me pario... era por eso?? xDDDDDD
Jjajajajjaja ya ves.... es casi seguro, porque yo en el codeblocks le quito -static y nada, que me da el error que nos daba en la consola!
Como he dicho esto es una jodienda.... porque al hacerlo estático aunque compile ocupa 650 KB mínimo cualquier ejecutable .gpe... y por ahí se dice que no funcionan las cosas que van linkadas de forma estática.
De momento lo confirmo con mi programa ke saca un pixel por pantalla, no veo nada perceptible xDD
Voy hacer uno que muestre un bmp para salir de dudas pero no tengo muchas esperanzas.
^MiSaTo^
11/09/2009, 13:38
Jjajajajjaja ya ves.... es casi seguro, porque yo en el codeblocks le quito -static y nada, que me da el error que nos daba en la consola!
Como he dicho esto es una jodienda.... porque al hacerlo estático aunque compile ocupa 650 KB mínimo cualquier ejecutable .gpe... y por ahí se dice que no funcionan las cosas que van linkadas de forma estática.
De momento lo confirmo con mi programa ke saca un pixel por pantalla, no veo nada perceptible xDD
Voy hacer uno que muestre un bmp para salir de dudas pero no tengo muchas esperanzas.
Jue XDD
Yo procuro no compilar estáticamente por lo que dices, por eso no se me había ocurrido hacerlo xDDDDDD
Si quieres compilo mi tetris (sólo se ve 1 pieza que puedes rotar y bajar y ya porque el resto de la lógica que está hecha no se "ve") y pruebas a ver si va (no tengo wiz xD)
Yo con el toolchain en /toolchain y con un link desde /opt/openwiz/toolchain no tengo problemas al compilar dinamicamente...
^MiSaTo^
11/09/2009, 13:45
Yo con el toolchain en /toolchain y con un link desde /opt/openwiz/toolchain no tengo problemas al compilar dinamicamente...
Pues te juro que así lo tengo yo y me da el error que puse por ahí arriba [Ahhh]
paso tabién las variables de mi makefile por si interesan:
GP2XSDK=/opt/openwiz/toolchain
GP2XBIN=$(GP2XSDK)/bin
SDL_CONFIG = $(GP2XBIN)/sdl-config
DEFAULT_CFLAGS = $(shell $(SDL_CONFIG) --cflags)
CC=$(GP2XBIN)/arm-openwiz-linux-gnu-g++
CFLAGS = -g -I$(GP2XSDK)/include $(shell $(SDL_CONFIG) --cflags)
CXXFLAGS = $(CFLAGS)
ASFLAGS = $(CFLAGS)
LIBS += $(shell $(SDL_CONFIG) --libs)
^MiSaTo^
11/09/2009, 13:49
paso tabién las variables de mi makefile por si interesan:
GP2XSDK=/opt/openwiz/toolchain
GP2XBIN=$(GP2XSDK)/bin
SDL_CONFIG = $(GP2XBIN)/sdl-config
DEFAULT_CFLAGS = $(shell $(SDL_CONFIG) --cflags)
CC=$(GP2XBIN)/arm-openwiz-linux-gnu-g++
CFLAGS = -g -I$(GP2XSDK)/include $(shell $(SDL_CONFIG) --cflags)
CXXFLAGS = $(CFLAGS)
ASFLAGS = $(CFLAGS)
LIBS += $(shell $(SDL_CONFIG) --libs)
Gracias, a ver si luego pruebo y te digo ;)
Y sin SDL_CONFIG:
CHAINPREFIX=/opt/openwiz/toolchain
CROSS_COMPILE=$(CHAINPREFIX)/bin/arm-openwiz-linux-gnu-
CC= $(CROSS_COMPILE)gcc
CXX = $(CROSS_COMPILE)g++
STRIP = $(CROSS_COMPILE)strip
CFLAGS = -I/opt/openwiz/toolchain/include -I/opt/openwiz/toolchain/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -DTARGET_GP2X -g
CXXFLAGS = $(CFLAGS)
LDFLAGS = -L/opt/openwiz/toolchain/lib -Wl,-rpath,/opt/openwiz/toolchain/lib -lSDL -lpthread -lSDL_image
alomejor te falla el rpath :P
Y sin SDL_CONFIG:
CHAINPREFIX=/opt/openwiz/toolchain
CROSS_COMPILE=$(CHAINPREFIX)/bin/arm-openwiz-linux-gnu-
CC= $(CROSS_COMPILE)gcc
CXX = $(CROSS_COMPILE)g++
STRIP = $(CROSS_COMPILE)strip
CFLAGS = -I/opt/openwiz/toolchain/include -I/opt/openwiz/toolchain/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -DTARGET_GP2X -g
CXXFLAGS = $(CFLAGS)
LDFLAGS = -L/opt/openwiz/toolchain/lib -Wl,-rpath,/opt/openwiz/toolchain/lib -lSDL -lpthread -lSDL_image
alomejor te falla el rpath :P
Yo diría que si, de ahí el fallo en la necesaria compilación dinámica...
¿Alguien sabe como añadir el rpath en el codeblocks? xDD Sino habrá que esperar al makefile actualizado...
< - >
Muchas gracias hopez! tenías razón con lo del rpath:
/toolchain/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-gcc -I/toolchain/arm-openwiz-linux-gnu/include -D_GNU_SOURCE=1 -D_REENTRANT -DTARGET_GP2X -g -L/toolchain/arm-openwiz-linux-gnu/lib -Wl,-rpath,/toolchain/arm-openwiz-linux-gnu/lib -lSDL -lpthread -lSDL_image -o sdl.gpe sdl.c
Este comando compila dinámicamente que da gusto!!
Voy testear aer si ahora si funciona en la wiz.
Misato, ya puedes actualizar tu makefile jejeje
< - >
REEDITO:
Testeado, ahora si que funcionan los ports!!!!!!!!!
He probado con el comando que escribí arriba y también a actualizar el método del codeblocks. La diferencia es que con el codeblocks el ejecutable ocupa 3 veces menos (de 9 paso a 3 KB) pero ambos funcionan perfectamente en la wiz, así que será cosa de las optimizaciones.
Pos aquí queda este post para que la gente sepa configurar esto en linux xD
^MiSaTo^
11/09/2009, 15:44
Gracias chicos ;)
Aprovecho para preguntar...
He estado intentando portar el gp2xmb, lo tengo que compilar dinámicamente pero lo consigo, una vez compilado al hacer el test en wiz me da el error: error while loading shared libraries: libc.so.6: cannot handle TLS data
¿Sabéis si hay forma de solucionarlo? (tengo el libc.so.6 del toolchain en la misma carpeta desde donde lo ejecuto)
Suena a que no te quiere cargar la librería libc.so.6
Diría que se puede tratar de un problema de versiones... ¿y si en vez de meter el libc.so.6 del toolchain openwiz metes el de la gp2x y lo distribuyes con la aplicación?
Eso debería eliminar cualquier incompatibilidad que pudiera haber surgido!
En teoría, claro está xD Porque quizás la wiz en vez de usar la librería que distribuyes tú usa una interna.
Gammenon
20/09/2009, 17:45
Bueno, siento no haber podido arreglar la compilación "manual" con destino gpe para wiz, sin embargo voy dejar aquí otra alternativa de compilación en Linux (que al menos funciona en ubuntu).
1- Instalad el paquete codeblocks (lo buscais en el synaptics, clic derecho instalar, aplicar cambios).
2- Abrís el codeblocks, vais a settings, tab compiler and debugger.
3- Seleccionais el GNU GCC compiler y presionais el botón Copy.
4- Os pide un nombre. Le llamaremos DevKit Gp2xWiz.
5- Ahora vamos a configurar los directorios, vamos a la tab Search Directories.
6- En la subtab compiler usamos el botón add para añadir los directorios:
/toolchain/arm-openwiz-linux-gnu/arm-openwiz-linux-gnu/include
/toolchain/arm-openwiz-linux-gnu/include
7- En la subtab linker usamos el botón add para añadir:
/toolchain/arm-openwiz-linux-gnu/lib
8- Ahora nos cambiamos a la tab Linker Settings y añadimos en el panel derecho:
-static -lSDL_gfx -lSDL_ttf -lfreetype -lSDL_image -ljpeg -lpng12 -lz -lSDL_mixer -lvorbisidec -lmikmod -lmad -lSDL -lgcc -lm -lc -lexpat -lpthread -msoft-float
9- Finalmente, iremos a la tab Toolchain executables.
10- En compiler's installation directory ponemos:
/toolchain/arm-openwiz-linux-gnu
11- Abajo en cada compilador ponemos por ejemplo para C:
arm-openwiz-linux-gnu-gcc
12- Para los dos siguientes:
arm-openwiz-linux-gnu-g++
13- Para el cuarto:
arm-openwiz-linux-gnu-ar
14- Los otros 3 se dejan en blanco.
15- Pulsamos ok para aceptar todos los cambios.
¡Ya tenemos configurado nuestro environment! Ahora creas un proyecto vacío, le agregas unos códigos fuentes, seleccionas el compilador del proyecto como DevKitGp2xWiz y ya te compila ejecutable para la wiz, usando todas las librerías disponibles.
También puedes configurar en configuración de proyecto el nombre de salida del ejecutable para que termine en .gpe y otras menudencias, pero lo fundamental está hecho.
Pos nada, voy testear algunas aplicaciones, hasta pronto!!
Con este montaje podria crear ejecutables tanto de PC (Linux Ubuntu) y de Wiz simplemente cambiado una opción en codeblocks?
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.