如何在 Windows 上使用 mingw 编译器(包括 -std=c++23)运行 SFML 64 位?

问题描述 投票:0回答:1

问题情况:

  • 从官方网站下载并解压“GCC 7.3.0 MinGW (SEH) - 64-bit”的“SFML (Version 2.5.1)”
  • 将 dll 文件复制到我自己的项目文件夹中,其中包含使用 SFML 的 main.cpp
  • 还将 include 和 lib 文件夹复制到我的项目文件夹的 src 文件夹中
  • 通过chocolatey安装了MinGW-w64(choco install mingw)
  • 将 bin 文件夹添加到该帐户的环境变量中(路径)
  • 编译项目:g++ -std=c++23 -Wall -Wextra -I src/include *.cpp -o Wizard.exe -L src/lib -lsfml-graphics -lsfml-window -lsfml-system

main.cpp:

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

到目前为止一切看起来都很好,编译工作

如何触发错误: 当您尝试运行该程序时,您会收到错误消息,指出无法找到 DLL 中的过程入口点。这使得可执行文件无用。

问题: 如何解决这个问题呢?不幸的是,错误的原因没有得到更详细的解释。

已经尝试过的方法: 作为解决方案,我已经尝试通过 MSYS2 重新安装 MinGW。但即便如此,编译还是有效的,但执行却导致了同样的错误。

dll sfml mingw-w64 c++23
1个回答
0
投票

经过长时间的搜索和尝试,现在我可以自己解决这个问题了:

请勿通过

choco install mingw
安装MinGW,因为这将安装太新的版本(例如14.1.0)。

相反,安装旧版本的 mingw,例如

choco install --version 11.1.0

该错误是由于 SFML 和 mingw 版本不兼容造成的。 SFML 网站建议使用 mingw 7.3.0,但 C++ 标准 std=c++23 尚不可用。 通过反复试验,我发现从 12.x.x 开始不兼容,这就是为什么我推荐 mingw 的 11.x.x 版本。

© www.soinside.com 2019 - 2024. All rights reserved.