c++ - 即使在手动设置显示环境变量后,WSL Ubuntu 仍显示 "Error: Unable

我在 WSL Ubuntu 上使用 g++。我使用 git 克隆了 GLFW 存储库,使用 ccmake 命令配置和生成二进制文件,然后在“build”目录中使用 make 最终创建了 。一个文件。我将所有与 OpenGL 相关的库安装到 /usr/ld(我不记得我安装了哪些,因为我必须安装这么多。无论如何,g++ 命令有效,所以我假设它是成功的)。之后,我在 VS Code 上创建了一个项目,如下所示:

GLFW 包含文件夹来自上述克隆的 repo,GLAD 和 KHR 包含文件夹来自 glad.dav1d.de ,我将 GL 版本(在 API 下)设置为 3.3,并将配置文件设置为 Core

main.cpp 中,我放了一段简单的代码来初始化 GLFW:

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

int main()
{
    // Initialize GLFW
    if (!glfwInit()) {
        std::cerr << "Failed to initialize GLFW" << std::endl;
        return 1;
    }
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    std::cout << "Success" << std::endl;

    return 0;
}

然后用这个命令编译项目:g++ -Wall -I./include/-L./lib/src/*.{c,cpp} -lglfw3 -lGL -lX11 -lpthread -lXrandr -lXi -ldl -o main.没有警告或错误或任何东西。运行可执行文件后,我收到 GLFW 初始化失败的错误消息。我有点困惑为什么会这样,所以我输入了 glxinfo 命令,发现我的 DISPLAY 环境变量还没有设置。

我完全不知道这个变量是什么,也不知道它代表什么。在网上搜了一圈后,我遇到了export DISPLAY=:0.0export DISPLAY=1export DISPLAY=IP:0.0,没有其中工作。关于如何解决这个问题的任何想法?

最佳答案

Windows 10 上的 WSL 不包括对 GUI 应用程序的支持。当然,您可以使用 OpenGL/X 库构建应用程序,但是运行它需要一个 X 服务器来实际显示它。

一般来说,您有 3 个选择。我相信所有这些都可以与 OpenGL 一起使用,尽管我还没有测试过它们中的每一个:

  • “支持”的方法是使用带有 WSLg 的 Windows 11。 Windows 11 使用受支持的 WDDMv3.0 驱动程序(可用于 AMD、Intel 和 nVidia GPU)支持开箱即用的 WSL2 中的硬件加速 OpenGL。参见 Microsoft Docs获取更多信息。

  • 在带有 Windows 10 的 WSL 上运行 X 服务器的“正常”方法是安装第三方 X 服务器,例如 VcXsrv。参见 this Super User question有关该场景下 OpenGL 支持的一些详细信息。不过,我认为这不会是硬件加速的。

    在这种情况下,您需要手动配置 DISPLAY 变量以指向您的 Windows 主机。你会发现一些相当 complicated directions这样做,但恕我直言,最简单的方法是通过 mDNS .

  • 在升级到 Windows 11 之前,我在需要 X 支持时使用了 xrdp。这允许使用远程桌面协议(protocol)和支持的应用程序(如内置 Windows 远程桌面连接)访问 WSL 实例。我也不相信有一种方法可以使用 RDP 硬件加速 OpenGL。在我看来,这比设置第 3 方 X 服务器要容易得多。看我的answer on Ask Ubuntu了解启用步骤。

关于c++ - 即使在手动设置显示环境变量后,WSL Ubuntu 仍显示 "Error: Unable to open display",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70546571/

相关文章:

python - 绕过欧盟同意请求

powershell - 对 Powershell 脚本中的所有错误调用函数

python - 如何解析 (1045, "Access denied for user ' Use

r - 从向量中提取字符元素

javascript - 3 条件 - 三元条件链 JavaScript react

android - Appium 创建 session 失败

rust - 错误处理、map_err 和错误类型转换

julia - 如何在 Julia 中绘制复数?

python - Julia 重新编码未定义

haskell - haskell 中有包含字符串和列表的类型吗?