Pregunta

He estado intentando producir una versión "binaria única" vinculada estáticamente de mi juego para Windows.Quiero vincularme con sdl, sdl_image y sdl_mixer, que a su vez incorporan algunas bibliotecas de soporte.Desafortunadamente, no he encontrado una manera de compilarlos y vincularlos usando cygwin/mingw/gcc.Por lo que puedo decir, todas las versiones públicas existentes son solo bibliotecas/dll compartidas.

Tenga en cuenta que aquí no estoy hablando de licencias.La fuente estará abierta, por lo que la GPL/LGPL de sdl no es relevante.

¿Fue útil?

Solución

Al compilar su proyecto, solo necesita realizar un par de cambios en su archivo MAKE.

  • En lugar de sdl-config --libs, usar sdl-config --static-libs
  • Rodear el uso de lo mencionado anteriormente. sdl-config --static-libs con -Wl,-Bstatic y -Wl,-Bdynamic.Esto le dice a GCC que fuerce el enlace estático, pero solo para las bibliotecas especificadas entre ellos.

Si su archivo MAKE actualmente se ve así:

SDLLIBS=`sdl-config --libs`

Cámbielo a:

SDLLIBS=-Wl,-Bstatic `sdl-config --static-libs` -Wl,-Bdynamic

En realidad, estas son las mismas cosas que tú debería hacer en sistemas tipo Unix, pero generalmente no causa tantos errores en sistemas tipo Unix si usas el más simple -static flag a GCC, como lo hace en Windows.

Otros consejos

A través de esto Publicación en la lista de correo de SDL parece que las herramientas de desarrollo sdl vienen con un script sdl-config que puede usar con el indicador --static-libs para determinar qué indicadores del vinculador necesita usar.

Ambiente:Máquina Virtual VMWare con Windows 7 x64 y Equipo we Dev c++ build 7.4.2.569, compilador g++ (tdm-1) 4.6.1

Una vez que instalé la API SDL2-2.0.3 como configuración de Dev c ++, no está muy claro lo que he hecho ya que la tradición requiere la línea de comando.

El primer problema es que Windows 7 parece haber cambiado la metodología y se le van a la pelota.Inventario.Árbitro. https://stackoverflow.com/users/464581/cheers-and-hth-alf

Después del primer obstáculo, SDL_platform.h está así de malo, está caído otro, no recuerdo dónde lo descargué, pero el siguiente no funciona en la versión indicada.

Debemos poner SDL2.h ls en el directorio del ejecutable.

D:\prg_desa\zsdl2>g++ bar.cpp main.cpp -o pepe1 -ID:\SDL2-2.0.3\i686-w64-mingw32\include\SDL2 -LD:\SDL2-2.0.3\i686-w64-mingw32\lib -lmingw32 -lSDL2main -lSDL2 -mwindow

Finalmente compilé y trabajo en las pruebas SDL2.

Esto se debe a que las bibliotecas SDL están bajo la licencia LGPL.

Si desea vincular estáticamente las bibliotecas (puede hacerlo si las vuelve a compilar).Sin embargo, es necesario piratear un poco los archivos MAKE; también debes colocar tu juego bajo alguna licencia de código abierto compatible.

Las bibliotecas SDL vienen como bibliotecas compartidas porque la mayoría de los programas que las utilizan son de código cerrado.La distribución binaria se presenta en una forma que la mayoría de la gente necesita.

En mi sistema (Ubuntu) tengo que usar las siguientes opciones:

-Wl,Bstatic -lSDL_image `sdl-config --libs` -lpng12 -lz -ltiff -ljpeg -lasound -laudio -lesd -Wl,-Bdynamic `directfb-config --libs` -lpulse-simple -lcaca -laa -ldl

Que une SDL, SDL_imagen, y muchas de sus dependencias son estáticas.libdl nunca querrás que sea estático, así que crea un binario completamente estático que use SDL_La imagen es una mala idea.pulse,caca,aa y directfb probablemente puedan volverse estáticos.Todavía no he llegado lo suficientemente lejos para descubrirlos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top