OCaml:尝试打开图形时出错 - “异常:Graphic.Graphic_failure “无法打开显示”。

Posted

技术标签:

【中文标题】OCaml:尝试打开图形时出错 - “异常:Graphic.Graphic_failure “无法打开显示”。【英文标题】:OCaml: Error while trying to open a graph - 'Exception: Graphics.Graphic_failure "Cannot open display ".' 【发布时间】:2022-01-11 03:26:08 【问题描述】:

在很长一段时间没有使用 OCaml 之后,我正在尝试重新使用 OCaml 进行编程,并且由于我当前的计算机上没有 Linux,我一直在尝试通过 WSL(Windows 子系统Linux)。

在完成了我在 Linux 中所做的一切之后,每当我尝试使用 Graphics 模块编译一段代码时,我都会得到以下结果:

如果我尝试使用open_graph 命令,我会收到以下错误:

Exception: Graphics.Graphic_failure "Cannot open display ".

如果open_graph 的参数是一个空字符串,或者以空格开头,我会得到那个确切的错误。如果字符串参数不为空并且不以空格开头(根据我的阅读,无论如何都不应该使用空格),则错误消息包括如下所述的参数:

Exception: Graphics.Graphic_failure "Cannot open display [argument of open_graph]".

如果代码仅使用基本 OCaml 命令和不需要打开图形(如 rgb)的图形命令,则一切正常编译。

我发现this thread 用户提出了 DISPLAY 变量可能是“错误”的问题。该线程的原始发布者有一个不同的问题,但我觉得它是相关的,因为我在想也许使用 WSL 可能会使我的 DISPLAY 变量“关闭”,或者可能要求我为 DISPLAY 使用与我不同的值在完整的 Linux 操作系统上使用 - 但老实说,我不知道那会是什么。

我尽力理解我阅读的所有内容并清楚地解释我的问题,但我对 Linux 和一般编程的经验只有中等,所以如果我误解了某些内容或我的解释不是最清楚的,我很抱歉.遇到这种情况,请告诉我,我会尽力改正的。

干杯!


完整代码示例和准确错误信息:

#use "topfind";; #require "graphics";; Graphics.open_graph "";;

返回错误信息:

Exception: Graphics.Graphic_failure "Cannot open display ".

【问题讨论】:

一个简单的解决方案是在您的笔记本电脑上安装Debian 或Ubuntu。大多数 Ocaml 开发人员都在运行一些 Linux 发行版......您也可能对RefPerSys 感兴趣。然后通过电子邮件联系我到basile@starynkevitch.net法国巴黎附近 【参考方案1】:

根据https://github.com/ocaml/graphics/issues/21,你需要在你的WSL环境中安装一个X11服务器。

【讨论】:

确实如此!非常感谢您的帮助。如果将来有人正在阅读此主题并遇到类似问题,并且像我一样不知道如何安装这样的服务器,here 是一个有用的视频,说明如何安装。

以上是关于OCaml:尝试打开图形时出错 - “异常:Graphic.Graphic_failure “无法打开显示”。的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ocaml 中使用类中定义的类型作为 val?

与来自 api rest 的数据反应时渲染图形时出错

OCaml 编译错误:语法错误:需要模块路径

OCaml - 在实现我的 rev 功能时需要一些帮助

编译包含“打开 Findlib”的 Ocaml 文件时出现未绑定模块 Findlib 错误

Ocaml模式匹配“方形”元组?