2015-09-30 2 views
3

J'ai clion pointant vers les répertoires SDL2 et bibliothèques, mais il ne parvient pas à lier les bibliothèques lorsque je tente de construire. Des idées pour résoudre le problème?Liaison SDL2 et Clion

CMakeLists:

cmake_minimum_required(VERSION 3.3) 

project(cavestory_development) 

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -lSDL2") 

set(SDL2_INCLUDE_DIR C:/SDL2-2.0.3/i686-w64-mingw32/include/SDL2) 

set(SDL2_LIBRARY C:/SDL2-2.0.3/i686-w64-mingw32/lib) 

find_package(SDL2 REQUIRED) 

include_directories(${SDL2_INCLUDE_DIR}) 

set(SOURCE_FILES main.cpp) 

add_executable(cavestory_development ${SOURCE_FILES}) 

target_link_libraries(cavestory_development ${SDL2_LIBRARY}) 

des erreurs de compilation:

"C:\Program Files (x86)\JetBrains\CLion 1.1\bin\cmake\bin\cmake.exe" --build C:\Users\conne_000\.clion11\system\cmake\generated\8a943732\8a943732\Debug --target cavestory_development -- -j 8 
[ 50%] Linking CXX executable cavestory_development.exe 
CMakeFiles\cavestory_development.dir/objects.a(main.cpp.obj): In function `SDL_main': 
C:/Users/conne_000/Documents/ClionProjects/cavestory_development/main.cpp:11: undefined reference to `SDL_Init' 
C:/Users/conne_000/Documents/ClionProjects/cavestory_development/main.cpp:21: undefined reference to `SDL_CreateWindow' 
C:/Users/conne_000/Documents/ClionProjects/cavestory_development/main.cpp:26: undefined reference to `SDL_GetError' 
C:/Users/conne_000/Documents/ClionProjects/cavestory_development/main.cpp:32: undefined reference to `SDL_Delay' 
C:/Users/conne_000/Documents/ClionProjects/cavestory_development/main.cpp:35: undefined reference to `SDL_DestroyWindow' 
C:/Users/conne_000/Documents/ClionProjects/cavestory_development/main.cpp:38: undefined reference to `SDL_Quit' 
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../libmingw32.a(main.o):main.c:(.text.startup+0xa7): undefined reference to `[email protected]' 
collect2.exe: error: ld returned 1 exit status 
mingw32-make.exe[3]: *** [cavestory_development.exe] Error 1 
CMakeFiles\cavestory_development.dir\build.make:96: recipe for target 'cavestory_development.exe' failed 
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/cavestory_development.dir/all' failed 
mingw32-make.exe[2]: *** [CMakeFiles/cavestory_development.dir/all] Error 2 
mingw32-make.exe[1]: *** [CMakeFiles/cavestory_development.dir/rule] Error 2 
CMakeFiles\Makefile2:78: recipe for target 'CMakeFiles/cavestory_development.dir/rule' failed 
mingw32-make.exe: *** [cavestory_development] Error 2 
Makefile:117: recipe for target 'cavestory_development' failed 

Répondre

0

Voici un exemple minimal pour vous aider à démarrer avec SDL2 sur les fenêtres (main.cpp contient juste le SDL bonjour de LazyFoo)

cmake_minimum_required(VERSION 3.0) 
project(hello_sdl2) 

# configure the SDL (cf. "SDL2-2.0.3\i686-w64-mingw32\lib\pkgconfig\sdl2.pc") 
# C++ flags 
set(SDL2_Flags "-mwindows -Wl,--no-undefined -static-libgcc") 
# library paths 
set(SDL2_ROOT  "D:/PATH/TO/SDL2-2.0.3/i686-w64-mingw32") 
set(SDL2_Includes "${SDL2_ROOT}/include") 
set(SDL2_LibDir "${SDL2_ROOT}/lib") 
# imported targets for CMake (cf. https://cmake.org/Wiki/CMake/Tutorials/Exporting_and_Importing_Targets) 
add_library(SDL2  STATIC IMPORTED) 
add_library(SDL2main STATIC IMPORTED) 
set_property(TARGET SDL2  PROPERTY IMPORTED_LOCATION "${SDL2_LibDir}/libSDL2.a") 
set_property(TARGET SDL2main PROPERTY IMPORTED_LOCATION "${SDL2_LibDir}/libSDL2main.a") 
# the libs to link against 
# note: as always with gcc, the order is important... 
set(SDL2_Libs mingw32 SDL2 SDL2main m dinput8 dxguid dxerr8 user32 gdi32 winmm imm32 ole32 oleaut32 shell32 version uuid) 

# configure the project 
# include the SDL flags 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ${SDL2_Flags}") 
# collect the sources 
set(SOURCE_FILES main.cpp) 
# define the target 
add_executable(hello_sdl2 ${SOURCE_FILES}) 
# include the SDL headers 
target_include_directories(hello_sdl2 SYSTEM PRIVATE ${SDL2_Includes}) 
# link against the SDL (and its dependencies) 
target_link_libraries(hello_sdl2 ${SDL2_Libs}) 

testé sur 64bits Win8.1 avec SDL2-2.0.3, MinGW-W64 i686-5.2.0-posix-dwarf-rt_v4-rev0 et CLion 1.2 EAP (build 142.5239.6)

+0

Je vais avoir des problèmes avec les bibliothèques liant. Mes dossiers lib se trouvent à $ {SDL2_ROOT}/lib/x64 ou à $ {SDL2_ROOT}/lib/x86. Et aussi, les fichiers libSDL2.a et libSDL2main.a n'existent pas. J'ai utilisé votre lien pour télécharger le lib. – Siamaster

+1

Si vous avez effectivement téléchargé [SDL2-2.0.3] (https://www.libsdl.org/release/SDL2-devel-2.0.3-mingw.tar.gz), vous trouverez tout ce dont vous avez besoin sous '$ {SDL2_ROOT}/i686-w64-mingw32'. cf. ligne # 8 – 865719

+0

le drapeau "-mwindows" fait que mes "std :: cout" ne fonctionnent pas. – Siamaster