Compilation 用Clozure-Common-Lisp编译二进制文件

Compilation 用Clozure-Common-Lisp编译二进制文件,compilation,executable,common-lisp,Compilation,Executable,Common Lisp,给出一个简单的程序,如以下所示,您将如何: 将其编译为一个单独的映像文件,由实现加载,您将使用什么命令行参数来加载它 将其编译为可按原样加载和运行的独立二进制文件 注意:我试图在保存应用程序时添加“:prepend kernel t”,结果抛出了follow错误 编辑 我不想回答自己问题的一部分,但我还是发现了这一点 加载函数后,请键入以下命令以对其进行编译: (ccl:save-application "app") 这将创建一个图像文件。通过将其传递给实现类型来加载它(注意:“ccl”二进

给出一个简单的程序,如以下所示,您将如何:

  • 将其编译为一个单独的映像文件,由实现加载,您将使用什么命令行参数来加载它

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

    注意:我试图在保存应用程序时添加“:prepend kernel t”,结果抛出了follow错误

  • 编辑

    我不想回答自己问题的一部分,但我还是发现了这一点

    加载函数后,请键入以下命令以对其进行编译:

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

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

    ccl -I app --eval (main)
    

    请参阅下的Clozure Common Lisp文档

    编译和加载Lisp文件

    您可以通过调用

     (compile-file "/foo/bar.lisp")
    
    这将创建一个包含本机代码的fasl(快速加载)文件

    您可以使用函数
    load
    加载编译后的文件fasl文件
    LOAD
    COMPILE-FILE
    是标准的通用Lisp函数

    创建应用程序

    一些定义:

    • CCL内核:CCL的一部分,提供诸如内存管理之类的低级运行时服务
    • 图:Lisp堆的已保存转储
    • 应用:CCL内核+镜像。这可以在一个文件中
    您可以通过调用特定于CCL的函数来保存应用程序:

    (save-application "/foo/bar-image" :toplevel-function #'main)
    
    这将保存一个映像,您可以使用CCL内核从命令shell运行该映像:

    ccl -I /foo/bar-image
    
    要保存包含内核的可执行文件,请使用Lisp中的以下命令:

    (save-application "/foo/bar-app"
                      :toplevel-function #'main
                      :prepend-kernel t)
    
    您可以像往常一样使用命令shell中的
    /foo/bar app
    调用此可执行文件

    在Clozure Common Lisp中,您可以检查

    *command-line-argument-list*
    

    查看提供的命令行参数列表。

    修复了错误。此外,应用程序按预期创建,但当我尝试加载exe时,一条错误消息告诉我“程序太大,无法装入内存”。你以前遇到过这个吗?知道修复方法吗?请参阅我的编辑,使用prepend kernel将内核添加到文件中。我在他们的Windows实现上测试了所有这些,并收到了提到的各种错误。我刚刚在Linux机器上测试了它,一切正常。谢谢。请确保您在Windows上拥有最新版本的CCL(从存储库更新)。如果这不起作用,请毫不犹豫地在CCL邮件列表或其bugtracker上报告此错误。顶部的“保存应用程序”链接不正确或已过时。
    ccl -I /foo/bar-image
    
    (save-application "/foo/bar-app"
                      :toplevel-function #'main
                      :prepend-kernel t)
    
    *command-line-argument-list*