【问题标题】:Compile SWI Prolog code into Windows executable - parser Grails3 project将 SWI Prolog 代码编译为 Windows 可执行文件 - 解析器 Grails3 项目
【发布时间】:2023-12-24 18:35:01
【问题描述】:

我正在尝试构建解析器 Grails3 项目https://github.com/RichardMoot/Grail,其教程为http://www.labri.fr/perso/moot/tutorial/install.html。教程中说需要nix系统或者需要Windows上的Cygwin。但真的需要吗?是否可以仅使用 Windows 安装的 SWI Prolog 从 Prolog 代码构建 Windows 可执行文件?

我可以假设这个项目的 makefile 是为某些 Prolog 编译器设计的吗?

我尝试使用 Cygwin 构建 Grails3,但它说没有什么可做的,并且 Cygwin 安装程序没有列出 Prolog 编译器的任何 Prolog(根本没有!)软件。那么 - 也许我可以只使用 SWI Prolog 作为编译器?

进度报告: 我尝试在 Ubuntu 上安装,但我的 make 给出了一些奇怪的输出,并且没有创建可执行文件,只创建了 g3 txt 文件:

osboxes@osboxes:~/Homes/Grail-master$ sudo make
cd source ; /bin/sed -e 's,@graildatadir\@,/home/osboxes/Homes/Grail-master/share/Grail,g' -e 's,@grailbindir\@,/home/osboxes/Homes/Grail-master/bin,g' g3 > g3.tmp
cd source ; mv -f g3.tmp g3
cd source ; chmod a+x g3

因此,即使在“make install”之后,我也无法运行 g3 命令,因为该文件未被识别为命令。所以,我不知道我的 make 输出是好是坏。

【问题讨论】:

  • 您是否从同一页面尝试过 GrailLight ?它只需要滑动
  • 同样在 Ubuntu 16.04 上,提供的安装(基于自动工具)不起作用。至少,我一直无法运行,但看了一下SW,我认为你可以简单地打开源代码并从swipl.exe运行(XPCE很好地集成到其中)
  • 我正在尝试将它安装在 Ubuntu Virtual Box 映像上,我在我的问题中添加了进度报告。
  • g3 应该是可执行文件,因此需要扩展名 .exe,Cygwin 也是如此。是否应该在使用安装信息修补 g3.pl 后由 swipl -c g3.pl -o g3 生成?
  • 我在 Windows 10 上试过,但无法以简单的方式加载源,抱歉...

标签: windows prolog cygwin swi-prolog


【解决方案1】:

在 Windows 中,具有 .exe 后缀的文件被识别为命令文件。 第二个指示是文件中的前两个字节,当您在 notepad.exe 或任何其他文件编辑器中将其可视化时,它必须是“MZ”。这些字节由编译器/链接器在创建文件时设置。

Swipl 随着时间的推移而发展。您在某些页面上阅读的内容可能不再适用于当前版本。所以破解互联网非常复杂。

一些 Swipl 文档说它是一个生成中间代码(Swipl 人们称之为“保存状态”)的编译器,它不是可执行代码或可识别的命令。

我刚试过

swipl --goal=main --stand_alone=true -o myprog -c test.pl

Test.pl 存在

追加([],X,X)。 append([X|Xs], Y, [X|Z]) :- append(Xs, Y, Z)。

main :- append([a,b],[c,d],X), write(X), get_single_char(Y), 停下来。

我确实收到了一个 myprog.exe,它是可执行的,魔术代码 MZ 作为第一个字节。所以在 2020 年,Swipl 是可执行二进制代码的完整编译器序言。太棒了!

对于我的简单程序来说,220 ko 有点大,但对我来说没问题!对于 Windows 中的部署,您可能仍然需要像往常一样将不同的 dll 文件与 exe 一起打包。有多种方法可以将您的 exe 和 dll 打包成一个压缩文件,这样它就成为一个完全独立的 exe。

  • winzip 自解压可执行文件
  • iexpress(Windows 8+ 的一部分)

并且可以使用 Chat_80 的源代码在 1.5 个月的文件中创建一个独立的控制台应用程序。漂亮!

【讨论】: