2017-12-31 177 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

ありがとう@Marioは、あなたが言及したプログラムを使用して、CMakeLists.txtに次の行を追加することで問題の原因を突き止めて解決できました: set(CMAKE_EXE_LINKER_FLAGS "-static") set(SFML_STATIC_LIBRARIES TRUE) – user3738870

+0

'正しいライブラリを選んでいて、それがフラグをたどっている最初のライブラリでしか機能しないならば、それを繰り返す必要があります。他の誰かが同じ問題を抱えている場合の回答。 – 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() 
関連する問題