Frage

Ich habe versucht, eine statisch gelinkte „einzelne binäre“ Version meines Spiels für Fenster zu produzieren. Ich möchte mit sdl, SDL_image und sdl_mixer die wiederum in wenigen Unterstützungs- Bibliotheken verknüpfen. Leider habe ich nicht einen Weg, um sie alle zu kompilieren und verknüpfen mit Cygwin / mingw / gcc gefunden. Soweit ich nur Bibliotheken / DLLs geteilt werden alle bestehenden öffentlichen Versionen erzählen kann.

Bitte beachten Sie, dass ich rede nicht über hier die Lizenzierung. Die Quelle geöffnet sein wird somit die GPL / LGPLness von sdl nicht relevant ist.

War es hilfreich?

Lösung

Wenn Sie Ihr Projekt kompilieren, brauchen Sie nur ein paar Änderungen an dem Make-Datei zu machen.

  • Statt sdl-config --libs, Verwendung sdl-config --static-libs
  • Surround die Verwendung der oben genannten sdl-config --static-libs mit -Wl,-Bstatic und -Wl,-Bdynamic. Dies teilt GCC statische Linken zu erzwingen, sondern nur für die Bibliotheken zwischen ihnen angegeben.

Wenn Ihre Make-Datei zur Zeit wie folgt aussieht:

SDLLIBS=`sdl-config --libs`

Ändern Sie es an:

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

Diese sind eigentlich die gleichen Dinge, die Sie sollte auf Unix-ähnliche Systeme tun, aber es verursacht in der Regel nicht so viele Fehler auf Unix-likes, wenn Sie den einfacheren -static Flag auf GCC verwenden, wie es tut unter Windows.

Andere Tipps

Über dieses SDL Mailingliste Post es scheint, dass das sdl Entwicklungstools Schiff mit einem sdl-config-Skript, das Sie mit der --static-libs Flagge etwas Linker-Flags zu bestimmen, die Sie benötigen, verwenden können.

Umwelt: VMWare Virtual Machine mit Windows 7 x64 und Ausrüstung, die wir Dev c + + bauen 7.4.2.569, complilador g + + (tdm-1) 4.6.1

Einmal SDL2-2.0.3 API installiert als Konfigurations Dev c ++ ist nicht ganz klar, was ich getan habe, wie es die Tradition Befehlszeile erfordert.

Das erste Problem ist, dass Windows 7 die Methodik geändert zu haben scheint, und sie gehen zu seinem Ball. Inventar. Ref. https://stackoverflow.com/users/464581/cheers-and-hth-alf

Nach der ersten Hürde, SDL_platform.h ist so schlecht, es ist unten eine andere, weiß ich nicht mehr, wo ich heruntergeladen, aber die nächste funktioniert nicht in der angegebenen Version.

Wir müssen SDL2.h ls im Verzeichnis der ausführbaren Datei setzen.

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

Ich habe schließlich zusammengestellt und arbeitet SDL2 Tests.

Das ist, weil die SDL-Bibliotheken unter der LGPL-Lizenz sind.

Wenn Sie den Libs statischen Link wollen (Sie können das tun, wenn Ihre recompile sie. Es einige Hacken in das Makefiles benötigt aber) Sie haben Ihr Spiel unter einer kompatibelen Open-Source-Lizenz und setzen.

Der SDL-Libs kommt als gemeinsam genutzte Bibliotheken, da die meisten Programme, die sie Closed-Source sind verwenden. Die binäre Distribution kommt in einer Form, dass die meisten Menschen brauchen.

Auf meinem System (Ubuntu) Ich habe folgende Flags verwenden:

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

Das Links SDL, SDL_image, und viele ihrer Abhängigkeiten als statisch. libdl Sie niemals statisch wollen, so eine voll statische binäre machen, die verwendet SDL_image eine schlechte Idee ist. Puls, caca, aa, und directfb kann wahrscheinlich statisch gemacht werden. Ich habe nicht weit genug habe sie noch herausfinden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top