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

求助:GLFW代码运行后窗口不显示且无报错信息

问题:GLFW窗口在Sway(Wayland)环境下无显示且无报错

运行下方代码后,窗口未出现,也没有任何报错信息:

代码文件

main.cpp

// main.cpp
#include <GLFW/glfw3.h>

int main() {
  glfwInit();
  GLFWwindow* window = glfwCreateWindow(640, 480, "My Title", glfwGetPrimaryMonitor(), NULL);
  while (!glfwWindowShouldClose(window)) {
    glfwPollEvents();
  }
  glfwDestroyWindow(window);
  glfwTerminate();
  return 0;
}

CMakeLists.txt

# CMakeLists.txt
cmake_minimum_required(VERSION 3.26)

project(app LANGUAGES CXX)

add_executable(${PROJECT_NAME} main.cpp)

find_package(glfw3 REQUIRED)

target_link_libraries(${PROJECT_NAME}
  PUBLIC
    glfw
)

环境信息

  • 操作系统:Arch Linux x86_64
  • 内核:6.5.7-zen1-1-zen
  • 窗口管理器:sway 1.8.1
  • GLFW版本:glfw-wayland 3.3.8-1(通过pacman -Qs glfw确认)

期望效果:显示器上显示指定名称的应用窗口。


解决方法

1. 补全GLFW窗口初始化的必要步骤

Wayland环境下,GLFW需要绑定上下文并提交帧才能让 compositor(Sway)识别并显示窗口,修改main.cpp如下:

// main.cpp
#include <GLFW/glfw3.h>

int main() {
  glfwInit();
  // 先创建窗口模式窗口,避免全屏模式的Wayland协议兼容问题
  GLFWwindow* window = glfwCreateWindow(640, 480, "My Title", nullptr, nullptr);
  
  // 增加错误检查,防止窗口创建失败后进入空指针循环
  if (!window) {
    glfwTerminate();
    return 1;
  }

  glfwMakeContextCurrent(window); // 绑定GL上下文,Wayland下必须执行

  while (!glfwWindowShouldClose(window)) {
    glfwPollEvents();
    glfwSwapBuffers(window); // 交换缓冲区,触发Sway绘制窗口
  }

  glfwDestroyWindow(window);
  glfwTerminate();
  return 0;
}
  • 移除了glfwGetPrimaryMonitor()参数:Wayland下全屏窗口需要额外的协议协商,先以窗口模式测试更易排查问题,后续如需全屏可再添加相关逻辑。
  • 添加glfwSwapBuffers(window):Wayland compositor 需要显式的帧提交指令,没有这一步窗口不会被渲染显示。

2. 强制GLFW使用Wayland后端

运行程序前设置环境变量,确保GLFW不会 fallback 到X11后端:

export GLFW_BACKEND=wayland && ./app

3. 检查依赖完整性

确保Wayland相关依赖已安装,Arch Linux下执行:

sudo pacman -S wayland-protocols

wayland-protocols包含GLFW在Wayland下运行所需的扩展协议,缺失可能导致窗口无法正常初始化。

4. 可选:CMake补充Wayland依赖检查

在CMakeLists.txt中添加Wayland相关配置,确保编译时链接完整:

find_package(Wayland REQUIRED)

target_link_libraries(${PROJECT_NAME}
  PUBLIC
    glfw
    Wayland::Wayland
)

内容的提问来源于stack exchange,提问作者Ян Мележ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:50:30