Windows - SDL2-projektet bygger på MinGW, men ikke Cygwin ved hjælp af CLion

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bygger et testprojekt ved hjælp af SDL2 og CLion på Windows 10. Projektet hedder HelloSDL er baseret på denne vejledning og skaber bare et vindue og udskriver 'Hello World'. Jeg bruger FindSDL2.cmake og FindSDL2\_ttf.cmake scripts herfra. Min CMakeLists.txt-fil er som følger: [4] [5]


cmake\_minimum\_required(VERSION 3.6)
project(HelloSDL)

set(CMAKE\_CXX\_STANDARD 11)

set(CMAKE\_MODULE\_PATH ${CMAKE\_MODULE\_PATH} "${HelloSDL\_SOURCE\_DIR}/cmake")

set(SDL2\_PATH "C:\SDL\SDL2-2.0.5\i686-w64-mingw32" CACHE PATH "The location to search for SDL2")
set(SDL2\_TTF\_PATH "C:\SDL\SDL2\_ttf-2.0.14\i686-w64-mingw32" CACHE PATH "The location to search for SDL2\_TTF")

find\_package(SDL2 REQUIRED)
include\_directories(${SDL2\_INCLUDE\_DIR})

find\_package(SDL2\_ttf REQUIRED)
include\_directories(${SDL2\_TTF\_INCLUDE\_DIR})

include\_directories(include)

set(SOURCE\_FILES main.cpp)
add\_executable(HelloSDL ${SOURCE\_FILES})
target\_link\_libraries(HelloSDL ${SDL2\_LIBRARY} ${SDL2\_TTF\_LIBRARY})


Projektet bygger og kører helt fint under MinGW, men når jeg forsøger at bygge det under Cygwin, får jeg linkingsfejl:


CMakeFiles/HelloSDL.dir/main.cpp.o: In function `SDL\_main':
/cygdrive/c/Users/Kieran/CLionProjects/HelloSDL/main.cpp:97: undefined reference to `SDL\_Init'
/cygdrive/c/Users/Kieran/CLionProjects/HelloSDL/main.cpp:102: undefined reference to `TTF\_Init'
/cygdrive/c/Users/Kieran/CLionProjects/HelloSDL/main.cpp:104: undefined reference to `SDL\_Quit'
/cygdrive/c/Users/Kieran/CLionProjects/HelloSDL/main.cpp:109: undefined reference to `SDL\_CreateWindow'
/cygdrive/c/Users/Kieran/CLionProjects/HelloSDL/main.cpp:113: undefined reference to `TTF\_Quit'
/cygdrive/c/Users/Kieran/CLionProjects/HelloSDL/main.cpp:114: undefined reference to `SDL\_Quit'
/cygdrive/c/Users/Kieran/CLionProjects/HelloSDL/main.cpp:117: undefined reference to `SDL\_CreateRenderer'
/cygdrive/c/Users/Kieran/CLionProjects/HelloSDL/main.cpp:121: undefined reference to `TTF\_Quit'
/cygdrive/c/Users/Kieran/CLionProjects/HelloSDL/main.cpp:122: undefined reference to `SDL\_Quit'
/cygdrive/c/Users/Kieran/CLionProjects/HelloSDL/main.cpp:133: undefined reference to `TTF\_Quit'
/cygdrive/c/Users/Kieran/CLionProjects/HelloSDL/main.cpp:134: undefined reference to `SDL\_Quit'
/cygdrive/c/Users/Kieran/CLionProjects/HelloSDL/main.cpp:140: undefined reference to `SDL\_QueryTexture'
/cygdrive/c/Users/Kieran/CLionProjects/HelloSDL/main.cpp:148: undefined reference to `SDL\_PollEvent'
/cygdrive/c/Users/Kieran/CLionProjects/HelloSDL/main.cpp:156: undefined reference to `SDL\_RenderClear'
/cygdrive/c/Users/Kieran/CLionProjects/HelloSDL/main.cpp:160: undefined reference to `SDL\_RenderPresent'
/cygdrive/c/Users/Kieran/CLionProjects/HelloSDL/main.cpp:164: undefined reference to `TTF\_Quit'
/cygdrive/c/Users/Kieran/CLionProjects/HelloSDL/main.cpp:165: undefined reference to `SDL\_Quit'


Jeg har ikke meget erfaring, men for mig indikerer det, at det ikke forbinder SDL2 biblioteket. Jeg er forvirret med hvorfor, når CMake output angiver, at den fandt SDL2 biblioteket:


-- Found SDL2: C:/SDL/SDL2-2.0.5/i686-w64-mingw32/lib/libSDL2main.a;C:/SDL/SDL2-2.0.5/i686-w64-mingw32/lib/libSDL2.dll.a  


Enhver hjælp ville blive værdsat for at forsøge at få det til at kompilere under Cygwin.

Bedste reference


Først skal du bruge bibliotekerne fra Cygwin (libSDL2 * -devel), ikke den du har downloadet til MinGW, og du skal også generere din Makefile med CMake ved hjælp af MSYS-formatet.



  cmake -G 'MSYS Makefiles'