为什么 glfwInit 在 X11 上因“文件描述符错误”错误而失败

问题描述

我已将 Fedora 从 31 更新到 34,因此,在使用 GLFW 运行程序时,我在 Bad file descriptor 中收到错误 errno

我进行了一些实验:

  • 侏儒
  • 侏儒经典
  • 使用 Xorg 的 Gnome
  • i3(我常用的窗口管理器)

这是我运行的示例 C 文件

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <GLFW/glfw3.h>

int main()
{
    if (!glfwInit()) {
        printf("%s\n",strerror(errno));
    }
    else {
        printf("GLFW Init OK\n");
    }
    glfwTerminate();
}

我编译它:

gcc -g $(pkg-config --cflags glfw3) -o myprog test.c $(pkg-config --static --libs glfw3) -I.

我在同一个目录中有 glad/gl.c

对于每个窗口管理器,我运行:

  • ./myprog
  • loginctl # 获取
  • loginctl show-session -p 类型

结果如下:

在 Gnome 上:

> ./myprog
GLFW Init OK

> loginctl show-session 9 -p Type
Type=wayland

关于 Gnome 经典版:

> ./myprog
Bad file descriptor

> loginctl show-session 11 -p Type
Type=x11

在 Gnome 上使用 Xorg:

> ./myprog
Bad file descriptor

> loginctl show-session 14 -p Type
Type=x11

在 i3 上:

> ./myprog
Bad file descriptor

> loginctl show-session 16 -p Type
Type=x11

我当前安装的 glfw 版本是:

glfw-devel-1:3.3.4-1.fc34.x86_64

但是,当从 Github 克隆 glfw 并使用标记 3.3.4 时,我可以编译它并使用 X11 在窗口管理器上运行测试和示例。

我不知所措,有人知道 glfw 和 X11 发生了什么吗?还是其他地方的问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)