pagina - Cómo compilar estáticamente un juego SDL en Windows
sdl h library (5)
He intentado producir una versión de mi juego "binario único" estáticamente vinculada para Windows. Quiero vincular con sdl, sdl_image y sdl_mixer, que a su vez extraen algunas bibliotecas de soporte. Desafortunadamente, no he encontrado una manera de hacer que todos compilen y vinculen usando cygwin / mingw / gcc. Por lo que puedo decir, todas las versiones públicas existentes son solo bibliotecas / dlls compartidas.
Tenga en cuenta que no estoy hablando de licencias aquí. La fuente estará abierta, por lo tanto, la GPL / LGPLness de sdl no es relevante.
Eso es porque las librerías SDL están bajo la licencia LGPL.
Si desea vincular estáticamente las librerías (puede hacerlo si las vuelve a compilar, aunque necesita algunos hacks en los archivos make), también debe colocar su juego bajo alguna licencia compatible de código abierto.
Los SDL-libs vienen como bibliotecas compartidas porque la mayoría de los programas que los usan son de código cerrado. La distribución binaria viene en una forma que la mayoría de la gente necesita.
A través de esta publicación de la lista de correo de SDL , parece que las herramientas de desarrollo sdl se envían con un script sdl-config que puede usar con el indicador --static-libs para determinar qué indicadores del enlazador necesita usar.
Al compilar su proyecto, necesita hacer solo un par de cambios en su archivo MAKE.
- En lugar de
sdl-config --libs
, usesdl-config --static-libs
- Rodee el uso del
sdl-config --static-libs
con-Wl,-Bstatic
y-Wl,-Bdynamic
. Esto le dice a GCC que fuerce los enlaces estáticos, pero solo para las bibliotecas especificadas entre ellos.
Si su archivo MAKE actualmente se ve así:
SDLLIBS=`sdl-config --libs`
Cambiarlo a:
SDLLIBS=-Wl,-Bstatic `sdl-config --static-libs` -Wl,-Bdynamic
En realidad, estas son las mismas cosas que debe hacer en sistemas tipo Unix, pero generalmente no causa tantos errores en Unix-likes si usa el indicador -static
simple para GCC, como lo hace en Windows.
En mi sistema (Ubuntu) tengo que usar los siguientes indicadores:
-Wl,Bstatic -lSDL_image `sdl-config --libs` -lpng12 -lz -ltiff -ljpeg -lasound -laudio -lesd -Wl,-Bdynamic `directfb-config --libs` -lpulse-simple -lcaca -laa -ldl
Eso vincula SDL, SDL _
y muchas de sus dependencias como estáticas. libdl nunca desea estática, por lo que crear un binario completamente estático que use imagen SDL _
es una mala idea. pulse, caca, aa y directfb probablemente pueden estar estáticos. Todavía no he llegado lo suficiente como para descubrirlos.
Medio ambiente: Máquina virtual VMWare con Windows 7 x64 y Equipo we Dev c + + build 7.4.2.569, complilador g + + (tdm-1) 4.6.1
Una vez, la API SDL2-2.0.3 instalada como configuración Dev c ++ no es muy clara, lo que he hecho ya que la tradición requiere línea de comandos.
El primer problema es que Windows 7 parece haber cambiado la metodología y van a su bola. Inventario. Árbitro. https://.com/users/464581/cheers-and-thth-alf
Después del primer obstáculo, SDL_platform.h es tan malo, está en 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 trabajé en las pruebas SDL2.