我刚开始学习Lisp,但不知道如何将代码编译和链接为可执行文件。
我正在使用clisp
,clisp -c
命令会生成两个文件:
- .fas
- .lib
接下来该怎么做才能得到一个可执行文件呢?
我刚开始学习Lisp,但不知道如何将代码编译和链接为可执行文件。
我正在使用clisp
,clisp -c
命令会生成两个文件:
接下来该怎么做才能得到一个可执行文件呢?
我今天实际上在尝试做这件事情,我发现在CLisp REPL中输入以下内容可以实现:
(EXT:SAVEINITMEM "executable.exe"
:QUIET t
:INIT-FUNCTION 'main
:EXECUTABLE t
:NORC t)
其中,main是程序启动时要调用的函数名称,:QUIET t
可以抑制启动画面,:EXECUTABLE t
可以生成本地可执行文件。
另外,调用下列命令也可能会有帮助:
(EXT:EXIT)
(quit)
以防止程序结束后用户得到交互式lisp提示符。:NORC t
(阅读link)。这将抑制加载RC文件(例如~/.clisprc.lisp
)。(save-application "/full/path/to/saved-app" :prepend-kernel t)
双击生成的可执行文件后,终端会显示非常长的错误信息,以一个类似于“error: problems loadiing bundle:can't determine class name”的错误开始,并以内核调试器选项结束。在Windows上使用CCL时,我只需定义一个函数并执行上述操作以保存可执行文件,稍后我可以双击输出文件运行并记住我的定义函数,但是在Mac上使用CCL时不会记住,即使我保存图像并手动将其加载到内核中。 - sçuçu这是一个稍作修改的Lisp FAQ:
更大的图像文件,包含 Lisp 世界的状态。这个功能的常见用途是倾倒一个定制的图像,其中包含给定项目中使用的所有构建工具和库,以减少启动时间。例如,在 CMUCL 中,此功能可用作 EXT:SAVE-LISP,在 SBCL 中为 SB-EXT:SAVE-LISP-AND-DIE,在 CLISP 中为 EXT:SAVEINITMEM,在 OpenMCL 中为 CCL:SAVE-APPLICATION。这些实现大多数可以将运行时前置到映像中,从而使它成为可执行文件。 应用程序交付:与其为应用程序生成单个可执行文件,Lisp 开发人员通常保存包含其应用程序的映像,并将其与运行时一起提供给客户端,可能还有一个 shell 脚本包装器,它使用应用程序映像调用运行时。在 Windows 平台上,可以通过使用类似于 click-o-matic InstallShield 的工具来隐藏这一点。*** 如何从我的程序制作可执行文件?
这取决于您所使用的实现,您需要查阅供应商的文档。
使用ECL和GCL,标准编译过程将生成本机可执行文件。
使用LispWorks,请参见文档中的“交付用户指南”部分。
使用Allegro Common Lisp,请参见手册中的“交付”部分。
等等...
然而,与Common Lisp程序的经典交互方式不涉及独立的可执行文件。在开发过程的两个阶段考虑这一点:编程和交付。
编程阶段:Common Lisp的开发更具有增量感,而不像批处理语言那样常见的是编辑-编译-链接循环。CL开发人员会在REPL(或Read-Eval-Print-Loop,也称为listener)中运行简单测试和瞬态环境交互。源代码保存在文件中,并在类似于ASDF的系统描述设施中记录源文件之间的构建/加载依赖关系(这在编辑-编译-链接系统中扮演类似于make的角色)。该系统描述设施提供用于构建系统(仅重新编译其依赖关系自上次构建以来发生更改的文件)和将系统加载到内存中的命令。
大多数Common Lisp实现也提供了“save-world”机制,可以将当前Lisp映像的快照保存下来,以便以后重新启动。Common Lisp环境通常由一个相对较小的可执行运行时和一个包含一组库和应用程序的图书馆集合组成。
交付阶段:通常,CL程序被交付为包含所有必需的库和应用程序的软件包。这些包可以通过各种方式分发和安装,例如二进制发行版、源代码发行版或网络下载。
ros
运行,类似于Python或Ruby程序中的哈希-邦行。ros dump executable
创建二进制可执行文件。gcl -compile jugs2.lisp
如果 jugs2.lisp 文件没有错误,则会生成 jugs2.o 文件。
不带参数运行 gcl 以启动 lisp 解释器:
gcl
加载 .o 文件:
(load "jugs2.o")
(si:save-system "jugs2")
当运行EXE时,需要DLL oncrpc.dll
;它位于<gcl安装文件夹>\lib\gcl-2.6.1\unixport
文件夹中,该文件夹由gcl.bat创建。
运行后会显示一个Lisp环境,调用(main)来运行主函数(main)。
compile-file
代替。 - Spenser Truex