You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SFML程序编译成功后运行出现DLL异常求助

SFML程序编译成功但运行时出现DLL加载错误(Windows + MSYS2 GCC)

问题概述

程序编译通过,但运行时触发DLL加载异常。已将相关SFML DLL文件放置在源码目录及sysWOW64文件夹中,仍无法启动程序,需排查原因以正常显示窗口。

环境信息

  • 编译器:MSYS2 UCRT64 GCC(路径:C:/msys64/ucrt64/bin/gcc.exe)
  • SFML路径:C:/SFML
  • 系统:Windows

代码与配置

main.cpp

#include <SFML/Graphics.hpp>

int main() {
    sf::RenderWindow window(sf::VideoMode(800, 600), "SFML Test"); // 创建800x600像素的窗口

    sf::CircleShape circle(50); // 创建半径为50像素的圆形
    circle.setFillColor(sf::Color::Red); // 设置圆形为红色
    circle.setPosition(375, 275); // 设置圆形在窗口中的位置

    while (window.isOpen()) {
        sf::Event event;
        while (window.pollEvent(event)) {
            if (event.type == sf::Event::Closed) {
                window.close(); // 点击关闭按钮时关闭窗口
            }
        }

        window.clear(sf::Color::Black); // 将窗口清空为黑色
        window.draw(circle); // 在窗口中绘制圆形
        window.display(); // 将窗口内容显示到屏幕
    }

    return 0;
}

c_cpp_properties.json

{
  "configurations": [
    {
      "name": "windows-gcc-x64",
      "includePath": [
        "${workspaceFolder}/**",
        "C:/SFML/include"
      ],
      "browse": {
        "path": [
          "${workspaceFolder}/**",
          "C:/SFML/include"
        ],
        "limitSymbolsToIncludedHeaders": true,
        "databaseFilename": ""
      },
      "defines": [
        "_DEBUG",
        "UNICODE",
        "_UNICODE"
      ],
      "compilerPath": "C:/msys64/ucrt64/bin/gcc.exe",
      "cStandard": "c11",
      "cppStandard": "c++17",
      "intelliSenseMode": "windows-gcc-x64",
      "compilerArgs": [
        "-IC:/SFML/include",
        "-LC:/SFML/lib",
        "-lsfml-graphics",
        "-lsfml-window",
        "-lsfml-system"
      ]
    }
  ],
  "version": 4
}

排查与解决步骤

  • 匹配DLL与编译器架构:MSYS2 UCRT64是64位环境,必须使用64位SFML DLL,不能混用32位版本。检查SFML/lib下的DLL,debug版本带-d后缀(如sfml-graphics-d-2.dll),release版本无后缀,需与编译模式一致。
  • 修正DLL放置路径:将DLL放到编译生成的.exe文件所在目录,而非源码目录。64位DLL应放入C:\Windows\System32(sysWOW64是32位程序的系统目录)。
  • 同步链接库与DLL版本:若编译的是debug版本,链接参数需改为debug库:-lsfml-graphics-d、-lsfml-window-d、-lsfml-system-d,同时使用对应debug版DLL。
  • 用Dependency Walker检查依赖:使用64位Dependency Walker打开.exe,查看是否有缺失的依赖(包括SFML依赖的系统DLL如opengl32.dll)。
  • 确保MSYS2运行时依赖:MSYS2编译的程序需要ucrtbase.dll、libgcc_s_seh-1.dll等运行时DLL,可将C:\msys64\ucrt64\bin添加到系统PATH,或复制相关DLL到exe目录。

内容的提问来源于stack exchange,提问作者Виктор

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:17:36