2017-02-01 1 views
1

J'essaie donc de faire fonctionner SDL2 avec CLion (afin que je puisse expérimenter/apprendre).Utilisation de SDL2 avec CLion sur OS X

Mon code principal est en tant que tel:

#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; 
} 

Et mon dossier CMake ressemble à ce

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}) 

Aussi, j'ai un FindSDL2.cmake de fichier à partir here dans un CMake dossier au sein du projet dossier. Maintenant, avec les fichiers comme je les ai postés, tout compile et fonctionne bien. Mais, quand je décommenter la section commentée dans les init(), la compilation tombe en panne et me donne l'erreur suivante:

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 

Note: Lesson_1.cpp est le fichier avec le code principal. En outre, ce n'est qu'une partie de l'erreur.

+0

Comme une note de côté, vous trouverez peut-être plus facile à gérer vos ressources en utilisant [RAII] (http://stackoverflow.com/questions/2321511/) de sorte que vous don Ne devez pas vérifier manuellement ce qui est initialisé et ce qui ne l'est pas lors du nettoyage ou du traitement explicite lors du traitement des exceptions. Vous pouvez envelopper une interface de style C comme SDL pour RAII [assez facilement] (http://stackoverflow.com/questions/39176805/), et vous finirez avec moins de fuites de ressources pour votre problème. – jaggedSpire

+0

Combien plus d'erreurs y a-t-il? Pouvez-vous raisonnablement afficher le reste? – jaggedSpire

+0

@jaggedSpire Bien sûr, j'ai posté le reste de l'erreur. –

Répondre

0

Utilisation find_library() au lieu de find_package()

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

C'est plus un commentaire qu'une réponse. – usr1234567