这是我的代码:
(defpackage :com.yves.tests (:use :common-lisp))
(in-package :com.yves.tests)
(require :usocket)每次评估require指令时,都会得到以下错误:
LOAD: A file with name #1=USOCKET does not exist
[Condition of type SYSTEM::SIMPLE-FILE-ERROR]当然,我在REPL中安装了带有quickload的包:
CL-USER> (ql:quickload "usocket")
To load "usocket":
Load 1 ASDF system:
usocket
; Loading "usocket"
("usocket")
CL-USER> 实际上,我昨天晚上安装了它,我所有的代码都是毫无怨言地进行评估的。今天我重新启动了Emacs和Slime。我得到了这个错误。还有其他的配置要做吗?
下面是我的加载路径中的内容:
CL-USER> (princ custom:*load-paths*)
(/Users/yves/quicklisp/ /opt/local/lib/clisp-2.49/dynmod/ ./ ~/lisp/**/)
(#P"/Users/yves/quicklisp/" #P"/opt/local/lib/clisp-2.49/dynmod/" #P"./"
"~/lisp/**/")
CL-USER> 我是不是应该手工把这条路添加到每一个新包裹上?quicklisp初始化本身不是应该执行的吗?
发布于 2013-09-15 10:48:16
Require不是这里所需的操作。
在简单的情况下,您可以将整个系统放在一个自给自足的文件中,您可以将ql:quickload表单包装到一个eval-when中。
(in-package #:cl-user)
(eval-when (:compile-toplevel :load-toplevel :execute)
(ql:quickload "usocket"))
(defpackage #:com.yves.tests
(:use #:cl))
(in-package #:com.yves.tests)
;; your code here如果您想不加限制地使用来自usocket的符号,请在defpackage表单中使用它:
(defpackage #:com.yves.tests
(:use #:cl #:usocket))如果您有一个跨多个文件的更大的系统,则可以使用ASDF。运行简单设置的一个快速方法是quickproject,它也可以从Quicklisp中获得。
发布于 2013-09-16 20:31:10
Svante已经回答了您的问题的一个基本解决方案,但是结合asdf (和.asd文件)使用quicklisp可以更容易地扩展项目及其需求可能会更舒服一些。
.asd文件的设置可能如下所示:
;;foobar.asd
(asdf:defsystem :foobar ;this is the name of your project
:depends-on (:usocket) ;those are the names of the dependencies
:components ((:file "the-file-name"))) ;this .asd has to be in the same folder (asdf-keyword :module)定义foobar.asd之后,您可以将项目移动到..quicklisp/本地-项目/ (符号链接将完成)文件夹,或者告诉如何找到您的项目。
现在您应该能够通过(ql:quickload :foobar)加载您的项目了。
从现在开始,asdf/quicklisp将在加载项目之前处理(向下)加载所有定义的依赖项。
如果以后希望扩展项目,从而扩展项目.asd文件,则可以在asdf手册或堆栈过流中找到有价值的信息。可以访问asdf的项目页这里。
https://stackoverflow.com/questions/18811335
复制相似问题