2017-12-31 114 views
0

Ich möchte die folgende einfache C++ SFML-Anwendung in CLion ausführen, aber wenn ich es versuche, bekomme ich immer die Fehlermeldung Test2.exe has stopped working.SFML funktioniert nicht mit CLion unter Windows

main.cpp

#include <SFML/Graphics.hpp> 
int main() 
{ 
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!"); 
    sf::CircleShape shape(100.f); 
    shape.setFillColor(sf::Color::Green); 

while (window.isOpen()) 
{ 
    sf::Event event; 
    while (window.pollEvent(event)) 
    { 
     if (event.type == sf::Event::Closed) 
      window.close(); 
    } 

    window.clear(); 
    window.draw(shape); 
    window.display(); 
} 

return 0; 
} 

Dies könnte ein Problem mit CMake sein, aber ich erhalte keine Fehlermeldung aus CLION, also denke ich SFML richtig gefunden wird.

CMakeLists.txt

cmake_minimum_required(VERSION 3.9) 
project(Test2) 

set(CMAKE_CXX_STANDARD 17) 

add_executable(Test2 main.cpp) 

set(SFML_ROOT "C:/Program Files/SFML-2.4.2") 

set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake_modules") 
find_package(SFML 2 REQUIRED graphics network audio window system) 

if(SFML_FOUND) 
    include_directories(${SFML_INCLUDE_DIR}) 
    target_link_libraries(${PROJECT_NAME} ${SFML_LIBRARIES} ${SFML_DEPENDENCIES}) 
endif() 

Mein SFML befindet sich in C:/Programme/SFML-2.4.2, und ich verwende die neueste Version (2.4.2) für MinGW. Ich habe die folgende MinGW-Version: MingGW configuration. Mein Betriebssystem ist Windows 8.1 Enterprise. Separat können sowohl CLion als auch SFML (mit Code :: Blocks) perfekt funktionieren.

Gibt es irgendetwas, das ich vergessen habe, zu CMakeLists.txt hinzuzufügen, oder sollte ich einige Einstellungen in CLion ändern, um SFML zum Funktionieren zu bringen?

+1

Haben Sie SFML selbst kompiliert? Sonst könnte eine Versionskonflikt vorliegen. Sie können auch versuchen, Ihre ausführbare Datei mit Hilfe von [Dependency Walker] (https://dependencywalker.com/) zu laden, um zu sehen, welche DLLs geladen sind (weil sie aufgrund Ihrer 'PATH'-Umgebungsvariable möglicherweise falsche Versionen aufnehmen könnten.) – Mario

+0

Vielen Dank @Mario, mit dem Programm, das Sie erwähnten, war ich in der Lage, herauszufinden, was das Problem war und es zu lösen, indem Sie die folgenden Zeilen zu der CMakeLists.txt: Set (CMAKE_EXE_LINKER_FLAGS "-static") Set (SFML_STATIC_LIBRARIES TRUE) – user3738870

+0

' "Statisch" sollte hier keinen Effekt haben, wenn Sie die richtigen Bibliotheken auswählen und es nur für die erste Bibliothek funktioniert, die der Markierung folgt (Sie müssten es also wiederholen). Fühlen Sie sich frei, diesen Kommentar als antworte, falls jemand anderes das gleiche Problem hat. – Mario

Antwort

0

Nach dem Ändern der CMakeLists.txt auf die folgende Weise funktionierte die erstellte .exe ohne Fehler.

cmake_minimum_required(VERSION 3.9) 
project(Test2) 

set(CMAKE_CXX_STANDARD 17) 
set(CMAKE_EXE_LINKER_FLAGS "-static -static-libgcc") 
set(SFML_STATIC_LIBRARIES TRUE) 

add_executable(Test2 main.cpp) 

set(SFML_ROOT "C:/Program Files/SFML-2.4.2") 

set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake_modules") 
find_package(SFML 2 REQUIRED graphics network audio window system) 

if(SFML_FOUND) 
    include_directories(${SFML_INCLUDE_DIR}) 
    target_link_libraries(${PROJECT_NAME} ${SFML_LIBRARIES} ${SFML_DEPENDENCIES}) 
endif() 
Verwandte Themen