问题情况:
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。但即便如此,编译还是有效的,但执行却导致了同样的错误。
经过长时间的搜索和尝试,现在我可以自己解决这个问题了:
请勿通过
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 版本。