2017-12-31 27 views
0

다음과 같은 간단한 C++ SFML 응용 프로그램을 CLion에서 실행하려고합니다.하지만 시도 할 때 항상 오류 메시지 Test2.exe has stopped working이 표시됩니다.SFML이 Windows의 CLion에서 작동하지 않습니다.

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

이 CMake에 문제가있을 수 있습니다,하지만 난 CLion에서 오류 메시지가없는, 그래서 SFML가 제대로 찾을 생각합니다./프로그램 파일/SFML-2.4.2, 내가는 MinGW의 최신 버전 (2.4.2)를 사용 :

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

내 SFML은 C에 위치하고 있습니다. 다음 MinGW 버전이 있습니다 : MingGW configuration. 내 운영 체제는 Windows 8.1 Enterprise입니다. 별도로 CLion과 SFML (Code :: Blocks)은 완벽하게 작동 할 수 있습니다.

CMakeLists.txt에 추가하는 것을 잊어 버렸거나 SFML이 작동하도록 CLion의 일부 설정을 수정해야합니까?

+1

SFML을 직접 컴파일 했습니까? 그렇지 않으면 버전 불일치가있을 수 있습니다. [Dependency Walker] (https://dependencywalker.com/)를 사용하여 실행 파일을로드하여 어떤 DLL이로드되었는지 확인할 수도 있습니다 ('PATH' 환경 변수에 따라 어딘가에 잘못된 버전이 나타날 수 있기 때문입니다). – Mario

+0

감사합니다 @ 마리오, 당신이 언급 한 프로그램을 사용하여, 나는 CMakeLists.txt에 다음 줄을 추가하여 문제가 무엇인지 알아낼 수 있었다 : 세트 (CMAKE_EXE_LINKER_FLAGS "- 정적") 세트 (SFML_STATIC_LIBRARIES TRUE) – user3738870

+0

' -static'은 올바른 라이브러리를 선택하고 플래그 다음의 첫 번째 라이브러리에서만 작동하므로 (다시 반복해야 함)이 주석을 다시 게시해야합니다. 다른 사람이 같은 문제가있는 경우 대답하십시오. – Mario

답변

0

다음과 같은 방법으로 CMakeLists.txt를 수정하면 만든 .exe가 오류없이 작동합니다.

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() 
관련 문제