我正在尝试构建解析器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的输出是好还是坏。
答案 0 :(得分:1)
在Windows中,后缀为.exe的文件将被识别为命令文件。 第二个指示是文件中的前两个字节,当您在notepad.exe或任何其他文件编辑器中可视化该文件时,该文件必须为“ MZ”。这些字节由编译器/链接器在创建文件时设置。
Swipl随时间而发展。您在某些页面上阅读的内容可能不再适用于当前版本。因此解密互联网非常复杂。
一些Swipl文档说这是一个生成中间代码的编译器(Swipl人们称其为“保存状态”),而不是可执行代码或可识别的命令。
我刚刚尝试
swipl --goal = main --stand_alone = true -o myprog -c test.pl
Test.pl是
append([],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。
有可能在1.5 Mo的文件中使用Chat_80的源代码创建一个独立的控制台应用程序。