我认为@faré是对的,这是输出翻译问题。
所以我宣布了环境变量ASDF_OUTPUT_TRANSLATIONS
并将其设置为E:/
。现在(asdf:require-system "my-system")
产生了一个不同的错误:Uneven number of components in source to destination mapping: "E:/"
导致我this SO主题。
不幸的是,他的解决方案对我不起作用。所以我尝试了另一个答案并将ASDF_OUTPUT_TRANSLATIONS
设置为(:output-translations (t "E:/"))
。现在我又得到了一个错误:
Invalid source registry (:OUTPUT-TRANSLATIONS (T "E:/")).
One and only one of
:INHERIT-CONFIGURATION or
:IGNORE-INHERITED-CONFIGURATION
is required.
(will be skipped)
我有一个简单的系统定义,但无法让ASDF加载它 (asdf-version 3.1.5,sbcl 1.3.12(升级到1.3.18 AMD64 ),史莱姆2.19,Windows 10)
它说:
对于Windows用户,从ASDF 3.1.5开始,从您的用户开始 %LOCALAPPDATA%,通常为〜/ AppData / Local /(但您可以询问 一个CMD.EXE终端回显%LOCALAPPDATA%以确保)和下面 创建一个子路径config / common-lisp / source-registry.conf.d /
这正是我所做的:
%LOCALAPPDATA%
C:\Users\my-username\AppData\Local
C:\Users\my-username\AppData\Local\config\common-lisp\source-registry.conf.d\
手册继续:
创建一个文件,其中包含您选择的任何名称,但类型为conf,例如
50-luser-lisp.conf
;在此文件中,添加以下行以告知ASDF以递归方式扫描/ home / luser / lisp /下的所有子目录:.asd文件:(:tree“/ home / luser / lisp /”) 这就够了。您可以将/ home / luser / lisp /替换为要安装源代码的任何位置。
在 source-registry.conf.d 文件夹中,我创建了文件 my.conf 并将其放入(:tree "C:/Users/my-username/my-systems/")
。此文件夹包含 my-system.asd 。
如果我现在在REPL中输入(asdf:require-system "my-system")
,我会收到以下错误:
无法创建目录C:\Users\my-username\AppData\Local\common-lisp\sbcl-1.3.12-win-x86\C\Users\my-username\my-systems\C:\
所以问题不在于ASDF找不到文件,它确实 - 但是(无论什么原因)它试图创建一个非常奇怪的子文件夹层次结构,最终失败,因为最后它尝试创建文件夹{ {1}}但Windows不允许包含冒号的foldernames。
C:
如果我尝试
(push path asdf:*central-registry*)
我得到完全相同的错误。
我不知道该怎么做。
由于ASDF尝试创建的奇怪路径的性质,我想也许我可以通过指定相对路径而不是绝对路径来绕过问题。
所以我试过了
> (push #P"C:/Users/my-username/my-systems/" asdf:*central-registry*)
(#P"C:/Users/my-username/my-systems/"
#P"C:/Users/my-username/AppData/Roaming/quicklisp/quicklisp/")
> (asdf:require-system "my-system")
在我的conf文件中。仍然是同样的错误。
答案 0 :(得分:2)
咳咳。它看起来像输出翻译问题。
我现在没有Windows机器,但是上次尝试时这都是常用的。
您现在可以设置一些临时输出翻译,以使其有效吗?