我创建了一个简单的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)。 错误:通用函数没有适用的方法: # 用参数调用时:
错误继续进行。我做错了什么?这是一个错误吗?
谢谢
答案 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应用程序商店中的版本更新。