c++ - 使用纯CMake构建SFML时出现运行时错误

标签 c++ cmake sfml clion

我正在启动一个使用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文件。根目录还包含从https://www.sfml-dev.org/download/sfml/2.5.1/的“源代码”下载链接下载的SFML源代码。

这是我的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文件就可以了。我的最小程序正在运行!

最佳答案

缺少sfml-window-d-2.dll文件。将包含SFML DLL的目录的路径添加到Code::Block动态库搜索路径(如果C::B中存在这种情况),或将其添加到PATH环境变量中,或将这些库简单地复制到包含以下内容的文件夹中:可执行的。您可以添加将复制这些库的构建后步骤。

编辑:
由于我的声誉低下,我无法发表评论。

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

关于c++ - 使用纯CMake构建SFML时出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59596189/

相关文章:

c++ - CMake 未将 boost 目录包含在其生成的项目中

c++ - CMake Automoc 错误 1 ​​- 无法编译项目

c++ - 成员函数的可访问性似乎随 SFML、C++ 和 Xcode 中的范围而变化

c++ - SFML C++无法加载字体

c++ - 缓存了多少缓存行?

c++ - 使用动态数组时,内存使用在 for 循环中不断增加。(C++)

c++获取错误 "Run-Time check failure #2 - stack around variable sub was corrupted"

c++ - Xcode 10 更新后 CMake 找不到 stdc++11

c++ - std::vector::erase() 不想 move

c++ - 组件-实体-系统 - 输入处理