【问题标题】:How to use packages installed by quicklisp?如何使用 quicklisp 安装的包?
【发布时间】:2012-06-25 15:49:14
【问题描述】:

我已经使用 quicklisp 安装了 CL-PNG 包。

(ql:quicklisp 'png)

现在我想定义我自己的依赖于 CL-PNG 包的包。像这样:

(defpackage :FOO
  (:use :CL :PNG)
  (:export :BAR))

编译时出现这个错误:

The name "PNG" does not designate any package.
   [Condition of type SB-KERNEL:SIMPLE-PACKAGE-ERROR]

在编译我的包之前,我似乎必须在 REPL 上调用 (require :PNG)

在不手动调用 REPL 上的require 的情况下,我必须做些什么才能使 CL-PNG 包可用于编译器?

更新:我正在使用 SBCL。

【问题讨论】:

    标签: lisp common-lisp packages sbcl quicklisp


    【解决方案1】:

    您混淆了两个不同的概念:systempackagepackage 由 Common Lisp 标准定义,它是符号的集合,是控制其可见性和使用的一种方式。 system 不是由标准定义的,它是由 ASDF 引入的概念,它是元数据的集合,用于管理单个项目中的文件相互依赖关系,以便能够正确编译和加载它。 Quicklisp 建立在ASDF 之上,以提供一种分发项目的方式,以ASDF systems 的形式描述。

    因此,当您安装 (quickload) 一个名为 PNGsystem 时,这并不意味着该系统有一个名为 PNG 的包。系统是否定义了任何包(通常它定义了一个,甚至几个)以及如何调用它们由其作者决定。大多数项目都有package.lisppackages.lisp 文件,其中定义了它们的packages。

    但是在你正在加载的CL-PNG系统的情况下,它实际上定义了包PNG,并且它应该在你quickload它之后的运行进程中可用。但是你应该在每次启动 Lisp 系统时加载它。 ASDF 提供了一种方法来定义对CL-PNG 系统的依赖,这样你就可以只加载你自己的 system,它所依赖的所有systems 都将被加载自动提供所有你想使用的packages。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 2018-02-03
    • 1970-01-01
    相关资源
    最近更新 更多