2017-05-12 4 views
0

Ich versuche, SDL-Bibliothek auf meinem Macbook arbeiten, um ein kleines Spiel (wahrscheinlich Tetris) in c. Ich habe die Installationsanweisungen für SDL unter https://wiki.libsdl.org/Installation gelesen und befolgt.C wird nicht mit sdl.h kompiliert

Wenn jedoch habe ich versucht, den folgenden C-Code zu kompilieren:

#include <SDL2/SDL.h> 
#include <stdio.h> 
int main() 
{ 
    SDL_Init(SDL_INIT_VIDEO); 
    printf("Window Initialization!\n"); 
    SDL_Window *window; 
    //printf("SDL_WINDOWPOS_CENTERED is %d\n", SDL_WINDOWPOS_CENTERED); 
    window = SDL_CreateWindow(
          "SDL2 Test", 
           SDL_WINDOWPOS_CENTERED, 
           SDL_WINDOWPOS_CENTERED, 
           640, 480, 0); 
    if(window == NULL){ 
     printf("Creation of Window Failed\n"); 
     SDL_Quit(); 
     return -1; 
    } 
    SDL_Delay(3000); //delay for 3000 ms 
    SDL_Renderer* rend = NULL; 
    SDL_DestroyWindow(window); 
    SDL_Quit(); 
    return 0; 
} 

mit dem Befehl:

gcc main.c -o run 

Der folgende Fehler gedruckt wird:

Undefined symbols for architecture x86_64: 
"_SDL_CreateWindow", referenced from: 
    _main in sdl1-a80c27.o 
"_SDL_Delay", referenced from: 
    _main in sdl1-a80c27.o 
"_SDL_DestroyWindow", referenced from: 
    _main in sdl1-a80c27.o 
"_SDL_Init", referenced from: 
    _main in sdl1-a80c27.o 
"_SDL_Quit", referenced from: 
    _main in sdl1-a80c27.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Da ich habe make und sudo make installieren, laut der Website sollte die SDL jetzt "universal" sein. Also ich nehme an, ich würde Linker nicht brauchen. Aber anscheinend ist das nicht der Fall.

Zuvor habe ich auch versucht, nur Framework-Datei in/Library/Frameworks hinzuzufügen. Und dann, wenn ich tat:

gcc sdl1.c -o run -F/Library/Frameworks/SDL2.framework/Headers -framework SDL2 

Der Code kann kompiliert bekommen. Manchmal möchte ich jedoch auch SDL2_image.h einbeziehen und ein weiteres -F /.../ wird nicht funktionieren.

Ich würde wirklich alle Vorschläge/Ratschläge zu schätzen wissen. Vielen Dank!

+1

Sie müssen wahrscheinlich mit '-lSDL' kompilieren. – immibis

+0

Um die Flagge zu bekommen, benutze 'sdl2-config --cflags --libs' –

Antwort

5

Aus der Dokumentation

gcc sdl1.c -o run `sdl2-config --cflags --libs` 

sdl kommt mit einem Werkzeug für Sie alle Flaggen zu erzeugen, ist es nur verwenden, ist es der beste Weg ist Ihr Build-System aufrecht zu erhalten.