Lisp可执行文件

时间:2008-08-24 13:42:35

标签: build lisp common-lisp clisp

我刚刚开始学习Lisp,我无法弄清楚如何编译和链接lisp代码到可执行文件。

我正在使用clispclisp -c会生成两个文件:

  • .fas
  • 的.lib

我接下来要做什么来获取可执行文件?

6 个答案:

答案 0 :(得分:48)

我今天真的试图这样做,我发现在CLisp REPL中输入了这个:

(EXT:SAVEINITMEM "executable.exe"
                 :QUIET t
                 :INIT-FUNCTION 'main
                 :EXECUTABLE t
                 :NORC t)

其中main是程序启动时要调用的函数的名称,:QUIET t禁止启动标题,:EXECUTABLE t生成本机可执行文件。

调用

也很有用
(EXT:EXIT)

在主函数的末尾,以便在程序完成时阻止用户获得交互式lisp提示。

编辑:阅读文档,您可能还想添加:NORC t (阅读link)。这会禁止加载RC文件(例如,~/.clisprc.lisp)。

答案 1 :(得分:35)

这是Lisp FAQ(略微改编):

  

***如何从我的程序中创建可执行文件?

     

这取决于您的实施;你需要咨询你的   供应商的文档。

     
      
  • 使用ECL和GCL,标准编译过程将会    生成本机可执行文件。

  •   
  • 使用LispWorks,请参阅交付用户指南部分    文档。

  •   
  • 使用Allegro Common Lisp,请参阅 Delivery 部分    手册。

  •   
  • 等...

  •   
     

然而,与Common Lisp程序交互的经典方式     不涉及独立的可执行文件。让我们考虑一下     开发过程的两个阶段:编程和交付。

     

编程阶段:Common Lisp开发有更多     增量感觉比批量导向语言中常见的那样     编辑 - 编译 - 链接循环很常见。 CL开发人员将运行简单     测试和与环境的瞬态交互     REPL(或Read-Eval-Print-Loop,也称为     听者)。源代码保存在文件和构建/加载中     源文件之间的依赖关系记录在系统描述中     ASDF等设施(与 make 中扮演类似角色     编辑 - 编译 - 链接系统)。系统描述工具提供     用于构建系统的命令(并且仅重新编译其文件的文件)     自上次构建以来依赖关系已经改变了,并且用于加载     系统进入记忆。

     

大多数Common Lisp实现还提供了“save-world”机制     这样就可以保存当前lisp图像的快照,     以稍后可以重新启动的形式。 Common Lisp环境     通常由一个相对较小的可执行运行时和一个     包含lisp世界状态的较大图像文件。普通的     使用此工具是转储包含所有的自定义图像     按顺序构建在给定项目上使用的工具和库     减少启动时间。例如,这个设施可以在     名称EXT:SAUC-LISP在CMUCL,SB-EXT:SAVE-LISP-AND-DIE in     SBCL,EXT:CLISP中的SAVEINITMEM,以及CCL:SAVE-APPLICATION in     OpenMCL。大多数这些实现都可以将运行时预先添加到     图像,从而使其可执行。

     

应用程序交付:而不是生成单个可执行文件     对于应用程序的文件,Lisp开发人员通常会保存图像     包含他们的应用程序,并与客户一起交付给客户     运行时和可能的shell脚本包装器调用     运行时与应用程序映像。在Windows平台上,这可以是     通过使用click-o-matic InstallShield类型工具向用户隐藏。

答案 2 :(得分:14)

看一下官方的clisp主页。有一个FAQ回答了这个问题。

http://clisp.cons.org/impnotes/faq.html#faq-exec

答案 3 :(得分:14)

CLiki也有一个很好的答案:Creating Executables

答案 4 :(得分:2)

要以便携方式执行此操作,我建议roswell

对于任何受支持的实现,您可以创建lisp脚本来运行可由ros以可移植方式运行的程序,该程序可以在hash-bang行中使用,类似于python或ruby程序。

对于SBCL和CCL,roswell还可以使用ros dump executable创建二进制可执行文件。

答案 5 :(得分:-1)

我知道这是一个老问题,但我看的Lisp代码是25岁: - )

我无法在Windows 10上使用clisp进行编译。 但是,gcl对我有用。

如果我的lisp文件是jugs2.lisp,

gcl -compile jugs2.lisp

如果jugs2.lisp文件没有错误,则生成文件jugs2.o。

运行没有参数的gcl来启动lisp解释器:

gcl

加载.o文件:

(load "jugs2.o")

创建一个EXE:

(si:save-system "jugs2")

运行EXE时需要DLL oncrpc.dll;这是在gcl.bat创建的<gcl install folder>\lib\gcl-2.6.1\unixport文件夹中。

运行时显示lisp环境,调用(main)运行main函数 (主)。