代码之家  ›  专栏  ›  技术社区  ›  jvn91173

使用纯CMake生成SFML时出现运行时错误

  •  0
  • jvn91173  · 技术社区  · 6 年前

    我正在启动一个使用SFML 2.5.1的项目。我在Windows上,我正在尝试使用纯CMake构建。CMake和编译步骤似乎工作正常,但当我尝试在CLion中运行程序时,会出现以下错误:

    Process finished with exit code -1073741515

    此外,如果我在命令行中找到可执行文件并尝试在其中运行它,程序将崩溃,并显示以下消息:

    The code execution cannot proceed because sfml-window-d-2.dll was not found.

    对于上下文,我的项目的根目录中有一个文件main.cpp,以及我的CMakeLists.txt文件。根目录还包含从“源代码”下载链接下载的SFML源代码 https://www.sfml-dev.org/download/sfml/2.5.1/ .

    这是我的CMakeLists.txt:

    cmake_minimum_required(VERSION 3.15)
    project(sfmltest)
    
    set(CMAKE_CXX_STANDARD 17)
    
    add_subdirectory(SFML)
    
    include_directories(SFML/include)
    
    add_executable(sfmltest main.cpp)
    
    target_link_libraries(sfmltest sfml-graphics sfml-audio sfml-network sfml-window sfml-system)
    

    这是我的main.cpp。它只是一个标准的SFML“Hello World”应用程序。

    #include <SFML/Window.hpp>
    
    int main()
    {
        sf::Window window(sf::VideoMode(800, 600), "My window");
        while (window.isOpen())
        {
            sf::Event event;
            while (window.pollEvent(event))
            {
                if (event.type == sf::Event::Closed)
                    window.close();
            }
        }
        return 0;
    }
    

    我的CMakeLists.txt文件中有遗漏吗?

    编辑1:我不需要像复制和粘贴dll这样的修复程序。我希望能够完全从头开始构建SFML。这是为了确保我的项目是可移植的、跨平台的、易于设置的,并且可以使用CLion中的CMake进行编译(而不是Visual Studio或Code::Blocks)。

    编辑2:添加 set(BUILD_SHARED_LIBS FALSE) 对我的CMakeLists.txt文件起了作用。我的最小程序正在工作!

    1 回复  |  直到 6 年前
        1
  •  1
  •   chwala    6 年前

    文件 sfml-window-d-2.dll 不见了。将包含SFML dll的目录的路径添加到Code::Block dynamic library search path(如果C::B中有这样的内容),或者将其添加到path环境变量,或者只需将这些库复制到包含可执行文件的文件夹中。可以添加将复制这些库的后期生成步骤。

    编辑: 我不能评论,因为我的名声不好。

    可以构建SFML静态库以避免复制dll。你必须禁用 BUILD_SHARED_LIBS CMake中的选项。

    推荐文章