如何使用quicklisp安装的软件包?
我已经使用quicklisp安装了CL-PNG包如何使用quicklisp安装的软件包?,lisp,common-lisp,packages,sbcl,quicklisp,Lisp,Common Lisp,Packages,Sbcl,Quicklisp,我已经使用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] 在编译包之
(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)
要使CL-PNG包可用于编译器,而无需在REPL上手动调用require
,我必须做些什么
更新:我使用的是SBCL。您混淆了两个独立的概念:系统和包。
包
由公共Lisp标准定义,它是符号的集合,是控制其可见性和使用的一种方式。标准未定义系统
,它是由ASDF
引入的一个概念,ASDF是一个元数据集合,用于管理单个项目中的文件相互依赖关系,以便能够正确编译和加载它Quicklisp
构建在ASDF
之上,以ASDF系统
s的形式描述了一种分发项目的方法
因此,当您安装(quickload
)一个名为PNG
的系统时,这并不意味着该系统有一个名为PNG
的包。系统是否定义了任何包(通常它定义了一个或几个包)以及如何调用它们是由其作者决定的。大多数项目都有package.lisp
或packages.lisp
文件,在这些文件中定义了它们的package
s
但是在您正在加载的CL-PNG
系统中,它实际上定义了包PNG
,并且在您加载quickload
之后,它应该在运行过程中可用。但每次启动Lisp系统时都应该加载它ASDF
提供了一种定义对CL-PNG
系统依赖关系的方法,这样您就可以只加载您自己的系统
,它所依赖的所有系统将自动加载,提供所有您想要使用的软件包。您能详细说明ASDF是如何提供这些功能的吗?需要什么语法?查看扩展名为.asd
的文件。这里更详细地描述了语法:@Faheem Mitha:有关开始使用ASDF的快速方法,请参阅。要使新项目可供Quicklisp使用,请将新项目放在Quicklisp发行版的本地项目
目录中(请参阅)。@MironBrezuleanu:谢谢,这看起来很有趣。