Ich verwende Windows 7, Code :: Blocks und MinGW. Ich habe wenig oder keine Erfahrung, wenn es darum geht etwas zu kompilieren/zu bauen, besonders wenn Code :: Blocks keine Makefiles benutzt.Statische Verbindung von SDL2-Bibliotheken
Ich habe SDL2-devel-2.0.0-mingw.tar.gz (SDL Development Libraries) von http://www.libsdl.org/tmp/download-2.0.php heruntergeladen, und ich möchte eine eigenständige ausführbare Datei mit SDL2-Bibliotheken erstellen, aber bisher musste ich immer bündeln Sie die SDL2.dll-Datei mit der ausführbaren Datei, damit es funktioniert.
Ich habe gehört, dass ich dynamische Bibliotheken nicht statisch verbinden kann, so scheint meine einzige Option etwas mit den Quelldateien zu tun, die die Datei SDL2-2.0.0.tar.gz (Quellcode) aus dem Link benutzen Ich habe das oben erwähnt. Ich weiß jedoch nicht, was ich damit machen soll.
Was ich mit den Quelldateien versucht habe, ist das Importieren des Visual Studio-Projekts in Code :: Blocks und das Erstellen, aber es sagt mir "sdl-config Keine solche Datei oder Verzeichnis" (Ich weiß nicht, was das ausgelöst hat). Ich bin mir auch nicht sicher, ob das Bauen mir lediglich eine ausführbare Datei gibt, mit der ich nicht weiß, was ich tun kann, um es mit meiner eigenen ausführbaren Datei zu verknüpfen.
Ein narrensicherer Idiot Schritt für Schritt Anleitung wäre die beste Wette, um diesen Fall zu lösen.
EDIT:
ich es geschafft, die SDL-Bibliotheken mit dem Führungs Jonas vorgesehen zu kompilieren, und bekam eine libSDL2.a Datei.
Zuerst habe ich nur den Pfad von libSDL2.a zu "Link libraries:" -Sektion von Code :: Blocks hinzugefügt, aber ich habe eine Reihe von Fehlern wie "SDL_Init() nicht in diesem Bereich deklariert".
Zusätzlich zu dem Pfad libSDL2.a habe ich auch den Pfad von SDL2-2.0.0 \ include zum Suchverzeichnis des Compilers sowie den Pfad von SDL2-2.0.0 \ build.libs zur Suche des Linkers hinzugefügt Verzeichnis. Ich schrieb das auch in meine Testdatei: #include "SDL.h". Meine Testdatei sieht nun wie folgt aus:
#include "SDL.h"
int main(int argc, char* args[]) {
//Start SDL
SDL_Init(SDL_INIT_EVERYTHING);
//Quit SDL
SDL_Quit();
return 0;
}
Es scheint die Erklärung Problem tat beheben, aber jetzt Code :: Blocks öffnete eine SDL_mmjoystick.c Datei und gab mir noch mehr Fehler: „undefined Verweis auf‚waveInClose @ 4 '"," undefinierter Verweis auf' waveOutClose @ 4 '"," undefinierter Verweis auf' joyGetNumDevs @ 0 '"und Tonnen anderer.
Hier ist ein Screenshot von dem, was passiert ist, beachten Sie die unterschiedliche Farbe der # include Texte, ich bin nicht sicher, warum das passiert: http://gyazo.com/00656a9c1e57a2bd0db1414fa7d68ced.png
Ich bin nicht sicher, wie man richtig in Gebrauch diese Bibliothek zu nehmen. Irgendwelche Hilfe in diesem Fall, oder sollte ich eine andere Frage dafür stellen?
EDIT:
Ich habe -lSDL2 den Linker-Optionen und löschte die anderen Parameter. Jetzt baut es in Ordnung:
mingw32-g++.exe -Wall -fexceptions -g -IC:\Users\User\Desktop\SDL2-2.0.0\include -c "C:\Users\User\Desktop\CppProjects\SDL project\main.cpp" -o obj\Debug\main.o
mingw32-g++.exe -Wall -fexceptions -g -IC:\Users\User\Desktop\SDL2-2.0.0\include -c "C:\Users\User\Desktop\CppProjects\SDL project\thetestfile.cpp" -o obj\Debug\thetestfile.o
mingw32-g++.exe -LC:\Users\User\Desktop\SDL2-2.0.0\build\.libs -o "bin\Debug\SDL project.exe" obj\Debug\main.o obj\Debug\thetestfile.o -lSDL2 ..\..\SDL2-2.0.0\build\.libs\libSDL2.a C:\Users\User\Desktop\SDL2-2.0.0\build\.libs\libSDL2.a -mwindows
Output size is 945.80 KB
Process terminated with status 0 (0 minutes, 1 seconds)
0 errors, 0 warnings (0 minutes, 1 seconds)
Aber wenn ich versuche, es zu laufen, es sagt mein Computer SDL2.dll fehlt, während der ganze Punkt war zu statisch-Link.
Also habe ich derzeit den Pfad zum Erstellen/.libs in meinen Link-Bibliotheken-Einstellungen, -lSDL2 in den anderen Linker-Optionen, und für Such-Verzeichnisse habe ich den Pfad zu SDL2-2.0.0/include für den Compiler und SDL2-2.0.0/build/.libs für den Linker.
Im Verzeichnis Build/.libs kann ich auch libSDL2.a, libSDL2.dll.a, libSDL2 sehen.la und libSDL2.lai Dateien, die ich nicht weiß, was sie sind.
Wenn Sie libsdl2.a explizit an den Linker vorbei sind, können Sie einfach auf '-lSDL2'. – greatwolf