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

GLFW初始化报错:libdecor-gtk无法初始化GTK问题求助

GLFW初始化时libdecor-gtk插件加载失败问题排查

问题背景

搭建bgfx测试项目时,GLFW初始化阶段出现libdecor-gtk-WARNING: Failed to initialize GTK及Failed to load plugin 'libdecor-gtk.so': failed to init警告,程序虽能执行到退出,但窗口装饰相关功能存在异常。重装系统并升级内核至6.10.0-3-Manjaro后问题消失,需明确问题成因及通用解决办法。

测试代码

#include <bgfx/bgfx.h>
#include <GLFW/glfw3.h>
#include <iostream>

#define WINDOW_WIDTH 1920
#define WINDOW_HEIGHT 1080

int main(int argc, char const *argv[])
{
    std::cout << "Initializing GLFW\n";
    glfwInit();

    std::cout << "Creating window\n";
    GLFWwindow *window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "Hello World", NULL, NULL);

    std::cout << "Initializing bgfx\n";
    bgfx::init();

    std::cout << "Exiting" << std::endl;
    return 0;
}

编译运行命令及输出

执行命令

cmake . && make && valgrind --leak-check=full --log-file="yay.log" ./BGFX_Testing

输出日志

-- Configuring done (0.0s)
-- Generating done (0.0s)
-- Build files have been written to: /home/entropy/CLionProjects/BGFX_Testing
[ 50%] Building CXX object CMakeFiles/BGFX_Testing.dir/main.cpp.o
[100%] Linking CXX executable BGFX_Testing
[100%] Built target BGFX_Testing
Initializing GLFW
libdecor-gtk-WARNING: Failed to initialize GTK
Failed to load plugin 'libdecor-gtk.so': failed to init
Creating window
Initializing bgfx
Exiting

系统信息

  • 原问题发生时内核:6.6.34-1-MANJARO
  • CPU:AMD Ryzen 7 5700X (16) @ 3.400GHz
  • GPU:AMD ATI Radeon RX6700XT

已尝试的无效方案

  • 重新安装libdecor:sudo pacman -S libdecor
  • 检查libdecor-gtk.so依赖:ldd /usr/lib/libdecor-gtk.so(所有依赖已安装)
  • 单独/同时安装glfw-x11和glfw-wayland

问题成因分析

  1. 内核与libdecor兼容性bug:6.6.x系列Manjaro内核可能存在与Wayland/X11窗口装饰框架libdecor的适配问题,导致GTK后端初始化失败。升级至6.10.x内核后问题消失,说明新内核修复了相关兼容性缺陷。
  2. 桌面环境后端冲突:Manjaro默认可能使用Wayland会话,而libdecor-gtk插件在Wayland环境下的GTK初始化逻辑存在异常,或与当前桌面环境的GTK版本不匹配。
  3. libdecor插件加载逻辑问题:libdecor尝试加载gtk插件时,未正确处理GTK初始化失败的情况,导致警告抛出,但不影响程序核心流程。

通用解决办法

  1. 升级内核到稳定新版本:直接升级至6.10+系列内核(或当前Manjaro推荐的稳定内核),修复底层兼容性问题。
  2. 强制GLFW使用X11后端:在glfwInit()前添加窗口提示,指定使用X11平台,绕过Wayland下的libdecor-gtk问题:
    glfwWindowHint(GLFW_PLATFORM, GLFW_X11);
    glfwInit();
    
  3. 更新libdecor及GTK依赖:执行全系统更新,确保所有组件版本匹配:
    sudo pacman -Syu libdecor gtk3
    
  4. 临时禁用libdecor-gtk插件:通过环境变量让libdecor跳过gtk插件加载,使用默认窗口装饰:
    export LIBDECOR_PLUGINS=""
    ./BGFX_Testing
    
    或在代码中设置环境变量:
    setenv("LIBDECOR_PLUGINS", "", 1);
    glfwInit();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:50:02