Question

J'ai essayé de produire un "unique binaire" lié de manière statique. version de mon jeu pour windows. Je veux créer un lien avec sdl, sdl_image et sdl_mixer, qui puisent dans quelques bibliothèques de support. Malheureusement, je n'ai pas trouvé le moyen de tous les compiler et de les lier avec cygwin / mingw / gcc. Autant que je sache, toutes les versions publiques existantes ne sont que des bibliothèques / dll partagées.

Veuillez noter que je ne parle pas de licence ici. La source sera ouverte, donc la licence GPL / LGPLness de sdl n’est pas pertinente.

Était-ce utile?

La solution

Lors de la compilation de votre projet, vous devez apporter quelques modifications à votre makefile.

  • Au lieu de sdl-config --libs , utilisez sdl-config --static-libs
  • Entourez l'utilisation du mentionné ci-dessus sdl-config --static-libs avec -Wl, -Bstatic et -Wl, -Bdynamic . Cela indique à GCC de forcer la liaison statique, mais uniquement pour les bibliothèques spécifiées entre elles.

Si votre fichier make ressemble actuellement à:

SDLLIBS=`sdl-config --libs`

Changez-le en:

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

Ce sont en fait les mêmes choses que vous devriez faire sur les systèmes de type Unix, mais cela ne provoque généralement pas autant d'erreurs sur les utilisateurs de type Unix si vous utilisez le plus simple -static à GCC, comme sur Windows.

Autres conseils

Via cette publication sur la liste de diffusion SDL il semble que les outils de développement sdl soient livrés avec un script sdl-config que vous pouvez utiliser avec l’indicateur --static-libs pour déterminer les indicateurs de l’éditeur de liens à utiliser.

Environnement: Machine virtuelle VMWare avec Windows 7 x64 et son équipement, c + + build 7.4.2.569, complément complet (tdm-1) 4.6.1

Une fois, l’API SDL2-2.0.3 installée en tant que configuration Dev c ++ n’est pas très claire, ce que j’ai fait car la tradition exige une ligne de commande.

Le premier problème est que Windows 7 semble avoir changé la méthodologie et ils vont à sa balle. Inventaire. Réf. https://stackoverflow.com/users/464581/cheers-and-hth-alf

Après le premier obstacle, SDL_platform.h est si mauvais, c'est un autre, je ne me souviens pas de l'endroit où j'ai téléchargé, mais le suivant ne fonctionne pas dans la version indiquée.

Nous devons mettre SDL2.h ls dans le répertoire de l'exécutable.

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

J'ai enfin compilé et travaille avec les tests SDL2.

En effet, les bibliothèques SDL sont sous licence LGPL.

Si vous souhaitez lier les bibliothèques de manière statique (vous pouvez le faire si vous les recompilez. Il faut toutefois pirater les fichiers Makefiles), vous devez également placer votre jeu sous une licence compatible open source.

Les bibliothèques SDL sont des bibliothèques partagées car la plupart des programmes qui les utilisent sont des sources fermées. La distribution binaire se présente sous une forme dont la plupart des gens ont besoin.

Sur mon système (Ubuntu), je dois utiliser les drapeaux suivants:

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

Cela lie SDL, l’image SDL _ et nombre de leurs dépendances en statique. libdl vous ne voulez jamais de statique, donc créer un binaire entièrement statique qui utilise l’image SDL _ est une mauvaise idée. pulse, caca, aa et directfb peuvent probablement être rendus statiques. Je n'ai pas encore assez loin pour les comprendre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top