2017-02-01 2 views
1

Also versuche ich, SDL2 mit CLion zu arbeiten (damit ich experimentieren/lernen kann).Verwendung von SDL2 mit CLion unter OS X

Mein Hauptcode ist als solche:

#include <iostream> 
#include <SDL.h> 

const int SCREEN_WIDTH = 640; 
const int SCREEN_HEIGHT = 480; 

bool init(); 

SDL_Window* gWindow = NULL; 

SDL_Surface* gScreenSurface = NULL; 

SDL_Surface* gHelloWorld = NULL; 

bool init(){ 
    bool success = true; 
    /*if(SDL_Init(SDL_INIT_VIDEO)<0){ 
     success = false; 
    } 
    else{ 
    }*/ 

    return success; 
} 

int main() { 
    std::cout << "Hello, World!" << std::endl; 
    return 0; 
} 

Und meine CMake-Datei sieht wie folgt aus

cmake_minimum_required(VERSION 3.6) 
project(SDL2_Lesson_1) 

set(CMAKE_CXX_STANDARD 11) 

# includes cmake/FindSDL2.cmake 
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) 

find_package(SDL2 REQUIRED) 
include_directories(${SDL2_INCLUDE_DIR}) 

set(SOURCE_FILES Lesson_1.cpp) 

add_executable(SDL2_App ${SOURCE_FILES}) 
target_link_libraries(SDL2_App ${SDL2_LIBRARY}) 

set(SOURCE_FILES Lesson_1.cpp) 
add_executable(SDL2_Lesson_1 ${SOURCE_FILES}) 

Auch ich habe eine Datei FindSDL2.cmake von here in einem Ordner Cmake im Rahmen des Projekts Mappe. Jetzt, mit den Dateien, wie ich sie gepostet habe, alles kompiliert und läuft gut. ABER, wenn ich den kommentierten Abschnitt innerhalb init() Kommentar-, bricht die Zusammenstellung nach unten und gibt mir die folgende Fehlermeldung:

Undefined symbols for architecture x86_64: 
    "_SDL_Init", referenced from: 
     init() in Lesson_1.cpp.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make[3]: *** [SDL2_Lesson_1] Error 1 
make[2]: *** [CMakeFiles/SDL2_Lesson_1.dir/all] Error 2 
make[1]: *** [CMakeFiles/SDL2_Lesson_1.dir/rule] Error 2 
make: *** [SDL2_Lesson_1] Error 2 

Hinweis: Lesson_1.cpp ist die Datei mit dem Hauptcode. Dies ist auch nur ein Teil des Fehlers.

+0

Als Randbemerkung, können Sie es einfacher finden, Ihre Ressourcen zu verwalten mit [RAH] (http://stackoverflow.com/questions/2321511/), so dass Sie don Sie müssen nicht manuell überprüfen, was beim Bereinigen initialisiert wird und was nicht, oder beim Säubern von Ausnahmen explizit mit dem Bereinigen umgehen. Sie können ein C-style Interface wie SDL für RAII [ziemlich leicht] (http://stackoverflow.com/questions/39176805/) wickeln, und Sie werden mit weniger Ressourcenlecks für Ihre Probleme enden. – jaggedSpire

+0

Wie viel mehr Fehler gibt es? Kannst du den Rest vernünftig veröffentlichen? – jaggedSpire

+0

@jaggedSpire Sicher, ich habe den Rest des Fehlers gepostet. –

Antwort

0

Verwenden find_library() statt find_package()

find_library(SDL2_LIBRARY SDL2 "path/to/your/library_bundle") 
find_library(SDL2_App ${SDL2_LIBRARY}) 
+0

Das ist mehr ein Kommentar als eine Antwort. – usr1234567