使用Clozure Common Lisp编译二进制文件

时间:2009-05-07 07:29:49

标签: compilation executable common-lisp

鉴于如下的简单程序,您将如何:

  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)
    
  4. 修改

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

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

    (ccl:save-application "app")
    

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

    ccl -I app
    

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

    ccl -I app --eval (main)
    

1 个答案:

答案 0 :(得分:29)

请参阅Saving Applications

下的Clozure Common Lisp文档

编译和加载Lisp文件

您可以通过调用

编译名为/foo/bar.lisp的文件
 (compile-file "/foo/bar.lisp")

这将创建一个 fasl (FASt Load)文件,其中包含本机代码。

您可以使用函数LOAD加载已编译的文件fasl文件。 LOADCOMPILE-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从命令shell调用此可执行文件。

在Clozure Common Lisp中你可以检查

*command-line-argument-list*

提供命令行参数列表。