我刚刚开始学习Lisp,我无法弄清楚如何编译和链接lisp代码到可执行文件.
我正在使用clisp
并clisp -c
生成两个文件:
.fas
的.lib
接下来我要做什么来获取可执行文件?
我今天真的试图这样做,我发现在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
(阅读链接).这会抑制加载RC文件(例如~/.clisprc.lisp
).
这是一个Lisp FAQ(稍加改编):
***如何从我的程序中生成可执行文件?
这取决于您的实施; 您需要查阅供应商的文档.
使用ECL和GCL,标准编译过程将生成本机可执行文件.
使用LispWorks,请参阅文档的"交付用户指南"部分.
使用Allegro Common Lisp,请参阅本手册的" 交付"部分.
等等...
但是,与Common Lisp程序交互的经典方法不涉及独立的可执行文件.让我们在开发过程的两个阶段考虑这一点:编程和交付.
编程阶段:与面向批处理的语言相比,Common Lisp开发具有更多的增量感,其中编辑 - 编译 - 链接循环很常见.CL开发人员将在REPL(或Read-Eval-Print-Loop,也称为监听器)上运行与环境的简单测试和瞬态交互 .源代码被保存在文件中,文件和源文件之间的构建/负载依存关系被记录在一个系统描述设施如ASDF(起着类似的作用,以使在编辑编译链接系统).系统描述工具提供用于构建系统的命令(并且仅重新编译自上次构建以来依赖性已经改变的文件),以及用于将系统加载到存储器中的命令.
大多数Common Lisp实现还提供了"保存世界"机制,可以以稍后可以重新启动的形式保存当前lisp图像的快照.Common Lisp环境通常包含一个相对较小的可执行运行时,以及一个包含lisp世界状态的较大图像文件.此工具的一个常见用途是转储包含在给定项目上使用的所有构建工具和库的自定义映像,以减少启动时间.例如,该设施在CMUCL中名为EXT:SAVE-LISP,在SBCL中为SAVE-LISP-AND-DIE,在CLISP中为EXT:SAVEINITMEM,在OpenMCL中为CCL:SAVE-APPLICATION.这些实现中的大多数可以将运行时预先添加到映像,从而使其可执行.
应用程序交付:Lisp开发人员通常不会为应用程序生成单个可执行文件,而是保存包含其应用程序的映像,并将其与运行时一起交付给客户端,并且可能是使用应用程序映像调用运行时的shell脚本包装器.在Windows平台上,可以使用click-o-matic InstallShield类型工具向用户隐藏它.
看一下官方的clisp主页.有一个FAQ来回答这个问题.
http://clisp.cons.org/impnotes/faq.html#faq-exec
CLiki也有一个很好的答案:创建可执行文件