【问题标题】:Can not compile to a native executable with Clozure CL on OS X 10.10 Yosemite无法在 OS X 10.10 Yosemite 上使用 Clozure CL 编译为本机可执行文件
【发布时间】:2014-11-23 13:41:47
【问题描述】:

我已经创建了一个简单的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 #) 执行时:#,在进程顶层(6)中。 错误:泛型函数没有适用的方法: # 当使用参数调用时: (# :BREAK-OPTIONS-STRING T) 执行时:#,在进程顶层(6)中。 错误:泛型函数没有适用的方法: # 当使用参数调用时: (# :BREAK-OPTIONS-STRING T) 执行时:#,在进程顶层(6)中。 错误:泛型函数没有适用的方法: # 使用参数调用时:

然后错误继续。我做错了什么?是bug吗?

谢谢

【问题讨论】:

    标签: build common-lisp ccl


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-22
        • 1970-01-01
        • 2014-11-10
        • 2014-12-14
        • 1970-01-01
        • 2016-08-13
        相关资源
        最近更新 更多