2

我创建了一个简单的 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) 中。错误:泛型函数没有适用的方法:# 使用参数调用时:

并且错误继续。我做错了什么?它是一个错误吗?

谢谢

4

2 回答 2

0

我在源代码的可可IDE 中找到了:note-current-package关键字:break-options-string。由于prepend-kernel t预先添加了当前会话中使用的内核,因此您似乎应该在应用程序中包含 cocoa-ide 启动。但是,在这些关键字上分派的方法仅在“ns-application”上分派,而您的新应用程序似乎并非如此。

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

于 2014-11-23T15:28:40.370 回答
0

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

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

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

于 2014-11-23T16:02:18.590 回答