24

给定一个简单的程序,如下所示,你会如何:

  1. 将其编译为由实现加载的单独图像文件,您将使用哪些命令行参数来加载它?

  2. 将其编译为可以按原样加载和运行的独立二进制文件。

    注意:我尝试在保存应用程序时添加“:prepend-kernel t”,只是为了引发以下错误。

    Error: value NIL is not of the
    expected type REAL. While executing: 
    CCL::<-2, in process Initial(0).
    
  3. 你会如何抑制欢迎信息?

    该程序

    (defun main ()
      (format t "This is the program.")0)
    

编辑

讨厌回答我自己的问题的一部分,但我还是发现了它。

加载函数后,键入以下内容进行编译:

(ccl:save-application "app")

这将创建一个图像文件。通过将其传递给实现类型来加载它(注意:“ccl”二进制文件在我的系统路径中);

ccl -I app

要运行顶级函数,请将其作为参数传递

ccl -I app --eval (main)
4

1 回答 1

31

请参阅保存应用程序下的 Clozure Common Lisp 文档

编译和加载 Lisp 文件

您可以编译/foo/bar.lisp通过调用命名的文件

 (compile-file "/foo/bar.lisp")

这将创建一个包含本机代码的 fasl(快速加载)文件

您可以使用函数加载已编译的文件 fasl 文件LOADLOAD并且COMPILE-FILE是标准的 Common Lisp 函数。

创建应用程序

几个定义:

  • CCL 内核:CCL 的一部分,提供内存管理等低级运行时服务。
  • 图片:保存的 Lisp 堆转储
  • 应用:CCL内核+镜像。这可以在一个文件中。

您可以通过调用 CCL 特定函数来保存应用程序:

(save-application "/foo/bar-image" :toplevel-function #'main)

这将保存一个图像,您可以从命令 shell 使用 CCL 内核运行该图像:

ccl -I /foo/bar-image

要保存包含内核的可执行文件,请在 Lisp 中使用:

(save-application "/foo/bar-app"
                  :toplevel-function #'main
                  :prepend-kernel t)

/foo/bar-app您可以像往常一样从命令外壳调用此可执行文件。

在 Clozure Common Lisp 中,您可以检查

*command-line-argument-list*

对于提供的命令行参数列表。

于 2009-05-07T08:40:10.890 回答