无法在OS X 10.10 Yosemite上使用Clozure CL编译为本机可执行文件

时间:2014-11-23 13:41:48

标签: build common-lisp ccl

我创建了一个简单的hello world(hello.lisp),代码:

(defun main ()
    (format t "Hello,World"))

,程序测试CCL的本机可执行编译。我继续从CCL GUI编译和加载缓冲区(使用版本Clozure Common Lisp版本1.10-store-r16266(DarwinX8664))。

当我测试它时:

    ? (main)
    Hello,World
    NIL
    ?

找到主要功能。当我继续用(save-application "/tmp/h" :toplevel-function #'main :prepend-kernel t)编译它时,它继续操作并且CCL退出。

文件已创建,大约为56MB。当我尝试运行它虽然我得到以下输出:

  

错误:通用函数没有适用的方法:            #          用参数调用时:            (#:NOTE-CURRENT-PACKAGE#)   执行时:#,正在处理toplevel(6)。   错误:通用函数没有适用的方法:            #          用参数调用时:            (#:BREAK-OPTIONS-STRING T)   执行时:#,正在处理toplevel(6)。   错误:通用函数没有适用的方法:            #          用参数调用时:            (#:BREAK-OPTIONS-STRING T)   执行时:#,正在处理toplevel(6)。   错误:通用函数没有适用的方法:            #          用参数调用时:

错误继续进行。我做错了什么?这是一个错误吗?

谢谢

2 个答案:

答案 0 :(得分:0)

我在源代码的可可源中找到了关键字:note-current-package:break-options-string。由于prepend-kernel t预先包含了当前会话中使用的内核,因此您可能会在应用程序中包含cocoa-ide启动。但是,调度这些关键字的方法仅在'ns-application`s上发送,你的新应用程序似乎不是。

解决方案可能是在没有cocoa-ide的情况下添加内核,方法是将代码加载到非GUI图像中,或者使用:prepend-kernel参数的这种内核的路径名。

答案 1 :(得分:0)

在Mac OS X上创建Clozure CL的可执行文件:

  • 对于非GUI应用程序,您需要从存储库Installing Clozure CL安装Clozure CL。你需要download CCL。此版本附带一个可执行的Lisp(内核+图像),它没有加载GUI。

  • 对于GUI应用程序,您需要使用Application Builder。相应的函数是ccl::build-application。 Mac OS X上的GUI应用程序需要一些基础架构,然后创建。请注意,CCL在ccl/examples/cocoa/currency-converter/中附带了一个示例应用程序。我个人也更喜欢从存储库中使用CCL - 它通常比Mac应用程序商店中的版本更新。