PDA

Ver la versión completa : ¿Compilación estática o dinámica?



programatta
14/09/2008, 19:49
Hola a tod@s de nuevo...

ayer estuve probando el ejemplo que venia en la wiki y no me funcionó en la GP2X.:(

Tras varios repasos a las librerías vi que no tenia puesto "-static" en las opciones de compilación. Al ponerlo, me da fallos en los que me dice, entre otras cosas, que SDL_image es está tica y que utiliza una librería dinámica (jpeg.o). Si quito "-static" entonces si que me compila pero al pasar el fichero .gpe a la GP2X no hace nada (pantalla negra).

De esto saco mi conclusión:
- Si hago compilación dinámica va todo de lujo salvo que no me funciona en la GP2X.
Entonces, ¿se tiene que hacer siempre compilación estatica para la GP2X ya que no existen las librerias de SDL en la GP2X ( o yo al menos no las tengo instaladas)?

Si me podeis aclarar esto os lo agradecería.
Un saludo para tod@s.

juanvvc
14/09/2008, 20:39
Las últimas versiones del firmware la F100 y la F200 sí que traen la librería SDL instalada, aunque no estoy seguro de qué versión es. Precisamente para evitar publicar varias versiones de las aplicaciones dependiendo del firmware, todos los programas de la Gp2x los compilamos siempre estáticamente.

Seguramente lo que te pasa es que te faltan flags en el compilador. Pásale al compilador la salida de $OPEN2X/bin/sdl-config --cflags --static-libs y al linkador la salida de $OPEN2X/bin/sdl-config --static-libs Lo mejor es usar un Makefile:



OPEN2X=/opt/open2x/gcc-4.1.1-glibc-2.3.6
CC = $(OPEN2X)/bin/arm-open2x-linux-gcc
LD = $(CC)

CFLAGS=`$(OPEN2X)/bin/sdl-config --cflags --static-libs`
LDFLAGS=-static `$(OPEN2X)/bin/sdl-config --static-libs` -ljpeg

OBJS=miprograma.o

all: $(OBJS)
$(LD) $(LDFLAGS) -o miprograma.gpe $(OBJS)

programatta
14/09/2008, 20:42
Muchas gracias Juanvvc...

voy a probar lo que me dices.

Muchas gracias de nuevo.
Un saludo!

Puck2099
14/09/2008, 20:51
Una cosa, si estás pensando en hacer software compatible con la Wiz yo te recomendaría compilarlo dinámicamente.

Si no tiras del hardware a bajo nivel y compilas dinámicamente hay un 95% de posibilidades de que funcione el mismo binario sin tocar nada en ambas consolas.

juanvvc
14/09/2008, 21:36
Una cosa, si estás pensando en hacer software compatible con la Wiz yo te recomendaría compilarlo dinámicamente.

Puck, ese argumento lo he escuchado un par de veces pero "no acabo de creérmelo". ¿No hay problemas con la versión de SDL/jpeg/png/loquesea? ¿Y qué otras librerías dinámicas trae la Wiz?

¿Puedes confirmar realmente que puedes ejecutar un programa complejo en la Gp2x y en la Wiz si están compilados dinámicamente? Para ponerte fácil las pruebas, la versión dinámica de termula, por ejemplo.

Puck2099
14/09/2008, 21:42
Puck, ese argumento lo he escuchado un par de veces pero "no acabo de creérmelo". ¿No hay problemas con la versión de SDL/jpeg/png/loquesea? ¿Y qué otras librerías dinámicas trae la Wiz?

¿Puedes confirmar realmente que puedes ejecutar un programa complejo en la Gp2x y en la Wiz si están compilados dinámicamente? Para ponerte fácil las pruebas, la versión dinámica de termula, por ejemplo.

Pues mira, yo todo lo que ejecuto en la Wiz basado en SDL está compilado dinámicamente contra las bibliotecas que usaba en la GP2X.

Tanto mi Lady Killer como el SMSPlus en SDL que hay por ahí como Fenix tiran así sin problemas.

Lo del Termula cuando saque un rato te lo pruebo a ver...

Lo que no tira muy bien es el SDL_Mixer, pues la versión que trae la consola está compilada sin soporte para libmikmod y libsmpeg, así que te pedirá los archivos de estas librerías en tiempo de ejecución si usaste una versión de SDL_Mixer compilada para ellas. Yo lo he solucionado poniendo los .so en el directorio del ejecutable y si no ejecutas archivos de tracker no da problemas, sé que es una chapuza, pero hasta que los de GPH me hagan caso y compilen unas SDL_Mixer como Dios manda no queda otra (he intentado compilarlas yo y tuve bastante problemas, así que desistí).

juanvvc
14/09/2008, 21:46
Tanto mi Lady Killer como el SMSPlus en SDL que hay por ahí como Fenix tiran así sin problemas.
Lo del Termula cuando saque un rato te lo pruebo a ver...

Vale, esos me parecen complejos de sobra para apoyar el argumento, no hace falta que pruebes termula que solo lo he puesto de ejemplo porque sé que hay versión dinámica :D Muchas gracias por la aclaración.

Entonces haz caso a Puck, si quieres compatibilidad Gp2x/Wiz compila dinámicamente a menos que uses librerías raras. Pero me sospecho que perderás compatibilidad que las Gp2x con firmwares antiguos :D

A600
14/09/2008, 21:58
Tanto mi Lady Killer como el SMSPlus en SDL que hay por ahí como Fenix tiran así sin problemas.

¿Podrías compilar el uae4all (la versión de Notaz con el core en ensamblador) para ver como tira?

Puck2099
14/09/2008, 22:01
¿Podrías compilar el uae4all (la versión de Notaz con el core en ensamblador) para ver como tira?

¿Está en SDL o Minilib?

A600
14/09/2008, 22:07
¿Está en SDL o Minilib?

SDL

Los fuentes los tienes aquí (http://www.gp2x.de/cgi-bin/cfiles.cgi?0,0,0,0,46,2417)

Puck2099
14/09/2008, 22:11
SDL

Los fuentes los tienes aquí (http://www.gp2x.de/cgi-bin/cfiles.cgi?0,0,0,0,46,2417)

Cuando tenga un rato lo intento compilar, pero en un vistazo rápido se ve que tiene bastante código con acceso directo al hardware, así que no sé hasta qué punto se podrá quitar y que siga funcionando...

hardyx
15/09/2008, 13:14
Lo malo es que compilando en dinámico con el SDK oficial las librerías que trae la consola no están tan optimizadas como las de paeryn por ejemplo. Puede que sea mejor sacar dos versiones, aunque los de GPH siempre recomiendan compilar en dinámico.


- Si hago compilación dinámica va todo de lujo salvo que no me funciona en la GP2X.
Hay librerías dinámicas, como SDL_gfx que no vienen en el firmware, y debes incluirlas junto al ejecutable. Posiblemente cuando queda en negro te está mostrando por el puerto serie que no encuentra una librería. Por ejemplo las F100 no tienen muchas librerías en el firmware 2.x.