Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Compilación cruzada con xmingw, SDL y SDL_gfx

Iniciado por Raziel, 19 de Agosto de 2006, 07:32:22 PM

« anterior - próximo »

Raziel

Wola.

Estoy metiéndome en el mundillo de la programación de videojuegos con un pequeño proyecto en SDL bajo Linux, y como soy un poco cabestro y quiero que el juego sea multiplataforma, estoy intentando hacer compilación cruzada (para windows) con xmingw.

Como uso Gentoo, instalé estos paquetes:
- dev-util/xmingw-binutils
- dev-util/xmingw-gcc
- dev-util/xmingw-runtime
- dev-util/xmingw-w32api

[ROLLO]

Después, instalé las librerías de SDL para win32, con este script:
- http://www.icculus.org/~dolson/sdl/sdl-cross-install.sh.txt
Que ejecuté como root y me instaló SDL, SDL_image, SDL_mixer, SDL_net y SDL_ttf en /opt/SDL-1.2.9

En mi programa, también uso SDL_gfx, así que me bajé el código (SDL_gfx-2.0.13.tar.gz), y lo compilé como malamente supongo que se debería compilar xD:

cross-configure.sh:
#!/bin/sh

CONFIG_SHELL=/bin/sh
export CONFIG_SHELL

PREFIX=/opt/SDL-1.2.9
TARGET=i386-mingw32msvc
PATH="$PREFIX/bin:/opt/xmingw/bin:$PATH"
export PATH

SDL_CONFIG="$PREFIX/bin/$TARGET-sdl-config"
export SDL_CONFIG

cache=cross-config.cache

sh configure --cache-file="$cache" \
  --target=$TARGET --host=$TARGET --build=i386-linux --prefix=/opt/SDL-1.2.9\
  $*

status=$?
rm -f "$cache"

exit $status


cross-make.sh:
#!/bin/sh

PREFIX=/opt/SDL-1.2.9
TARGET=i386-mingw32msvc
PATH="$PREFIX/bin:/opt/xmingw/bin:$PATH"
export PATH
exec make $*


Y con un make install lo instalé en /opt/SDL-1.2.9 (esto me copió los .h pertinentes, libSDL_gfx.la y libSDL_gfx.a)

*sigh*

Ahora intenté compilar mi juego, que estoy desarollando en kdevelop.

Y llegan los problemas (qué decepción su funcionase a la primera, oiga).

Cualquier intento de compilar con kdevelop desemboca en un

configure: error: C++ compiler cannot create executables" cuando hago el configure.

Si me voy a la raíz del proyecto y ejecuto los scripts de antes (cross-configure y cross-make), el configure no me da ningún problema, pero el make ahora mismo me dice que

/opt/xmingw/lib/gcc/i386-mingw32msvc/3.4.4/../../../../i386-mingw32msvc/bin/ld: cannot find -lSDL

No sé qué habré cambiado en la configuración del proyecto (y al volver a usar autoconf y automake), porque antes me decía que no podía encontrar -lpthread, que ahora diga que no a -lSDL no sé si es bueno o malo xDD

*En fin* si me voy a la carpeta de sources y simplemente intento hacer un
i386-mingw32msvc-g++ *.cpp *.h `/opt/SDL-1.2.9/bin/i386-mingw32msvc-sdl-config --libs --cflags` -lSDL_mixer -lSDL_image -lSDL_ttf -lSDL_gfx

[/ROLLO]

No me pone ninguna pega al compilar (*esperanza*) pero! (*depresión*) al linkar me escupe

collect2: ld terminated with signal 11 [Segmentation fault]
/tmp/cclrKPyx.o:CFramerate.cpp:(.text+0x21): undefined reference to `__imp__SDL_initFramerate'
/tmp/cclrKPyx.o:CFramerate.cpp:(.text+0xd3): undefined reference to `__imp__SDL_initFramerate'
/tmp/ccaZGCut.o:CGame.cpp:(.text$_ZN9Framerate6setFPSEi[Framerate::setFPS(int)]+0x16): undefined reference to `__imp__SDL_setFramerate'
/tmp/ccaZGCut.o:CGame.cpp:(.text$_ZN9Framerate5delayEv[Framerate::delay()]+0xf): undefined reference to `__imp__SDL_framerateDelay'


Que me suena a librería mal instalada.


En fin, antes de seguir dando palos de ciego, álguien tiene experiencia haciendo este tipo de cosas y me puede comentar qué puedo estar haciendo mal? xD

senior wapo

Prueba a meter un -L/opt/SDL-1.2.9/lib o donde sea que este libsdl.a de win32 en los flags de linker a ver si asi...

Raziel

Eso en teoría ya va en el "/opt/SDL-1.2.9/bin/i386-mingw32msvc-sdl-config --libs" (el resultado es "-L/opt/SDL-1.2.9/lib -lmingw32 -lSDLmain -lSDL -mwindows"), el problema ahora mismo creo que es que está mál instalado SDL-gfx...

zupervaca

[off-topic]
Yo SDL ni papa por que nunca me ha llegado a interesar, lo unico es que he visto que pones a todos los archivos la letra "C", en c++ todos los archivos son clases asi que como consejo (que puedes o no tener en cuenta) es que no pongas la letra "C", ademas te aconsejo como ultimo poner los nombres de los archivos en minusculas, ya que por ejemplo linux si es "case sensitive" (diferencia entre mayusculas y minusculas) en el nombre de los archivos, pero windows no, y eso puede darte problemas al compilar en una u otra plataforma.

Suerte en el proyecto :!:
[/off-topic]






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.