2017-03-19 1 views
1

Ich habe vor kurzem Interesse an der Verwendung von SDL nachdem ich einige Grundlagen von C gelernt habe. Ich habe SDL_image und SDL_mixer installiert. Sie befinden sich in/usr/local/include/SDL2. Ich merke, dass Sie gegen die Header-Dateien verknüpfen müssen, aber ich bin nicht sicher, wie es geht. Ich bekomme den Fehler, dass SDL_mixer oder SDL_image nicht existieren (abhängig von ihrer Zeilenreihenfolge in meinem Quellcode). Ich habe zwei verschiedene Compilation Befehle ausprobiert und weder Arbeit hier sind sie:SDL in einem C-Programm verknüpfen

gcc filename.c -o test -I./include -L./usr/local/include/SDL2 -lSDL2main -lSDL2 -lSDL_mixer -lSDL_image 

gcc filename.c -o test -I./usr/local/include/SDL2 -L./lib -lSDL2main -lSDL2 -lSDL_mixer -lSDL_image 

Wenn jemand eine Idee hat, würde ich es zu schätzen wissen! Danke im Voraus!

Antwort

3

Sie nicht wollen, dass führende Periode

falsch

gcc filename.c -o test -I./include -L./usr/local/include/SDL2 -lSDL2main -lSDL2 -lSDL_mixer -lSDL_image 

näher - unbedingt noch nicht korrekt

gcc filename.c -o test -L/usr/local/include/SDL2 -lSDL2main -lSDL2 -lSDL_mixer -lSDL_image 

jeder Pfad mit einem führenden Zeitraum angibt, aus aktuellem Verzeichnis zu starten und gehen relativ anstelle des beabsichtigten absoluten Pfades

Jedes System hat th e Begriff einer Standardbibliothek, die in Ordnung ist, wenn Sie eine Standardinstallation verwenden ... also keine Notwendigkeit, ein

-I/include 

... irgendwann eine Bibliothek Helfer tun, um diese zu identifizieren und automatisch bevölkert ...

sdl und SDL2 haben einen solchen Helfer ... dies wird Ihnen diese Einstellungen

gcc -o test filename.c `pkg-config --cflags --libs sdl2` 

Mitteilung jene Backticks ... eine andere Syntax Stil wäre

gcc -o test filename.c $(pkg-config --cflags --libs sdl2) 

Sie sind frei, das allein nur stehen zur Ausgabe von

pkg-config --cflags --libs sdl2 

... einen Blick Ausgang

-D_REENTRANT -I/usr/include/SDL2 -lSDL2 

Jetzt auf Ihrem sdl Mixer zu nehmen ... und es ist ein

pkg-config --cflags --libs SDL2_mixer 
hat

... Ausgabe

Sie wollen wahrscheinlich nicht sdl mit SDL2 mischen Erwähnung

-lSDL_mixer -lSDL_image 

mit

-lSDL2_mixer -lSDL2_image 

gemäß

pkg-config --cflags --libs SDL2_image 

so ersetzen ...Ausgabe

-D_REENTRANT -I/usr/include/SDL2 -lSDL2_image -lSDL2 

, so dass diese zusammen

gcc -o test filename.c -lSDL2main $(pkg-config --cflags --libs sdl2) $(pkg-config --cflags --libs SDL2_mixer) $(pkg-config --cflags --libs SDL2_image) 

oder einfacher kombiniert

gcc -o test filename.c -lSDL2main $(pkg-config --cflags --libs sdl2 SDL2_mixer SDL2_image) 

diese Bündelung einfach folgende abgespeckte werden kann ... noch über Syntax ist robuster Änderungen

gcc -o test filename.c -D_REENTRANT -I/usr/include/SDL2 -lSDL2main -lSDL2 -lSDL2_mixer -lSDL2_image 
+0

Vielen Dank für die sehr detaillierte Antwort. Ich habe das noch nicht ausprobiert, aber ich bin sicher, es wird funktionieren! – TheCrifix

+2

Die 'pkg-config' kann kombiniert werden' $ (pkg-config --cflags --libs sdl2 SDL2_mixer) ' –

+0

@Scott Stensland Hey Scott, ich habe gerade den folgenden Kompilierbefehl benutzt, wie du vorgeschlagen hast: gcc -o test filename .c -lSDL2main $ (pkg-config --cflags --libs sdl2 SDL2_mixer SDL2_image) und es kompiliert, aber wenn es darum ging, das Programm zu testen, habe ich einen Fehler ausgelöst. Beim Testen meines Programms habe ich einen Fehler gemeldet, der besagt, dass ich kein verfügbares Videogerät habe. Irgendwelche Ideen? – TheCrifix

2

Sie können sdl2-config verwenden Sie die entsprechenden Flags gcc zu liefern:

gcc filename.c -o test `sdl2-config --cflags --libs` 

sdl2-config --cflags erzeugt eine Liste von Optionen, die an den Compiler übergeben werden sollen, und sdl2-config --libs erzeugt eine Liste von Bibliotheken, die verknüpft werden sollen.