【问题标题】:How to configure Clion to work with SDL2?如何配置 Clion 以使用 SDL2?
【发布时间】:2017-02-23 19:37:55
【问题描述】:

我只是想学习如何在 Clion(Jetbrains IDE)中使用 SDL,我在帖子中找到了编辑我的 CMakeLists.txt 的答案,我做到了!但它没有用。

我可以使用这些库,但我无法编译它,在图像中您可以在输出控制台中看到错误。

有人可以帮我配置一下吗

这是我的“CMakeLists.txt”

cmake_minimum_required(VERSION 3.6)
project(OpenGLTest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lmingw32")
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")

include_directories(${PROJECT_SOURCE_DIR}/include)
link_directories(${PROJECT_SOURCE_DIR}/lib)

set(SOURCE_FILES main.cpp)
add_executable(OpenGLTest ${SOURCE_FILES})

target_link_libraries(OpenGLTest libSDL2main libSDL2 libSDL2_test)

这是我的“main.cpp”

#include <iostream>
#include <SDL.h>

int main() {
    SDL_Init(SDL_INIT_EVERYTHING);
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

PS:这是我写的代码,只是为了测试编译。

这是 Clion 控制台中的错误

Error

【问题讨论】:

标签: c++ c++11 sdl sdl-2 clion


【解决方案1】:

“CMakeLists.txt”的正确文本是:

cmake_minimum_required(VERSION 3.6)
project(OpenGLTest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lmingw32")
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")

include_directories(${PROJECT_SOURCE_DIR}/include)
link_directories(${PROJECT_SOURCE_DIR}/lib)

set(SOURCE_FILES main.cpp)
add_executable(OpenGLTest ${SOURCE_FILES})

target_link_libraries(OpenGLTest mingw32 SDL2main SDL2)

您必须将文件“SDL2.dll”(位于 \bin 中)复制到“cmake-build-debug”文件夹。这是一个例子https://gyazo.com/fae7ab9ccc73e3a66e9d9c2d3419ff1e

PS:不要忘记“include”和“lib”文件夹

这是一个示例代码,只是为了测试它。

#include <iostream>
#include <SDL.h>

int main(int argc, char* argv []) {
    if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
        std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl;
        return 1;
    } 
    std::cout << "Hello, World!" << std::endl;
    SDL_Quit();
    return 0;
}

【讨论】:

    【解决方案2】:

    我无法发表评论,但我认为您应该在每个链接库之前删除 libtarget_link_libraries(OpenGLTest SDL2main SDL2 SDL2_test)

    (错误信息说找不到-llibSDL2main,正确的标志应该是-lSDL2main

    【讨论】:

    • 这次的错误信息是什么?我认为你不需要SDL2_test,并把mingw32 下来:target_link_libraries(OpenGLTest mingw32 SDL2main SDL2)`
    • 是这个,我改成target_link_libraries(OpenGLTest mingw32 SDL2main SDL2) gyazo.com/06b897f383eed83ddfffe53612d25614
    • 你需要将main声明为int main(int argc, char* argv[])
    • 我在控制台中没有看到任何错误,我只是看到:进程以退出代码 -1073741515 (0xC0000135) 结束
    • 但似乎更好
    【解决方案3】:
    1. 将 SDL2.dll(位于 x86_64-w64-mingw32\bin)复制到 C:\Windows\System32 文件夹作为永久解决方案,然后重新启动您的操作系统。

    2. 不要忘记在您的 CMakeLists.txt 中添加以下内容

      • 设置(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lmingw32") 设置(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")

    【讨论】:

      【解决方案4】:

      我有以下配置文件:

      cmake_minimum_required(VERSION 3.17)
      project(vector_fields_simulations)
      
      set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
      set(CMAKE_CXX_STANDARD 14)
      
      find_package(SDL2 REQUIRED)
      
      include_directories(.)
      include_directories(src)
      include_directories(${SDL2_INCLUDE_DIR})
      
      add_executable(vector_fields_simulations src/main.cpp)
      
      target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARY})
      

      我唯一需要做的就是改变 SLD2/SDL.h by ../SLD2/SDL.h

      注意 1:我在名为 cmake 的文件夹中使用 FindSDL2.cmake(github 链接),以便项目包含 SDL,后者不是强制性的,但它可能会对您有所帮助。

      注意2:如果您的程序在编译时抛出错误,请尝试在.cpp主文件中的main函数之前使用#undef main或将其更改为main(int argv, char** args)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-14
        • 1970-01-01
        • 2020-07-14
        相关资源
        最近更新 更多