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

Linux下SFML中sf::Mouse::setPosition函数致程序崩溃求助

解决SFML调用sf::Mouse::setPosition崩溃的问题

先排查代码调用是否正确

确保调用sf::Mouse::setPosition时满足以下条件:

  • 必须在窗口创建完成后调用,不能在窗口初始化前执行该方法
  • 如果是设置相对于窗口的坐标,必须传入窗口对象作为第二个参数,示例:
// 正确:设置相对于窗口的鼠标位置
sf::Mouse::setPosition(sf::Vector2i(400, 300), window);
// 仅传坐标是设置相对于屏幕的位置,部分环境下可能引发异常
sf::Mouse::setPosition(sf::Vector2i(100, 100));

解决SFML 2.5.1与gcc 12.2.0的兼容性问题

SFML 2.5.1发布于2020年,未针对gcc 12的C++标准变化做适配,编译最新版SFML源码是最直接的解决方案,步骤如下:

  1. 安装编译依赖:
sudo apt install cmake libx11-dev libxrandr-dev libudev-dev libopenal-dev libflac-dev libvorbis-dev libgl1-mesa-dev libfreetype6-dev
  1. 下载并编译最新稳定版SFML(以2.6.1为例):
git clone https://github.com/SFML/SFML.git
cd SFML
git checkout 2.6.1
mkdir build && cd build
# 配置编译参数,指定安装到系统目录
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_SHARED_LIBS=ON
# 并行编译(nproc自动获取CPU核心数)
make -j$(nproc)
# 安装到系统
sudo make install
# 更新动态链接库缓存
sudo ldconfig
  1. 修改Makefile以链接本地编译的SFML:
    先卸载apt安装的旧版SFML避免冲突:
sudo apt remove libsfml-dev

然后更新Makefile:

compile: ./main.cpp
        g++ -c main.cpp -I/usr/local/include
        g++ main.o -o app -L/usr/local/lib -lsfml-graphics -lsfml-window -lsfml-system

run:
        ./app

排查窗口会话问题

Kubuntu 22.10默认可能使用Wayland会话,部分SFML操作在Wayland下存在兼容性问题,尝试切换到Xorg会话:

  • 登录时点击用户名旁的齿轮图标
  • 选择Kubuntu on Xorg登录
  • 重新运行程序测试

内容的提问来源于stack exchange,提问作者user20885516

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:15:41