Common lisp 如何使ASDF停止尝试加载不存在的文件?

Common lisp 如何使ASDF停止尝试加载不存在的文件?,common-lisp,quicklisp,asdf,Common Lisp,Quicklisp,Asdf,在Debian上,我在/usr/lib/sbcl/site系统中安装了一堆cruft,它们不会加载,因为FASL与实际安装的sbcl版本不匹配 出于某种原因,这些文件都没有与任何Debian软件包相关联(这是一台运行同一Debian安装已超过十年的旧计算机,它位于Debian Sid上) 我一次删除一个坏的系统,对于大多数系统,Quicklisp做了正确的事情并下载了Quicklisp版本。有时,ASDF会坚持系统应该存在于其以前的路径上,但重新启动SBCL解决了这个问题 但对于一个系统,ASD

在Debian上,我在/usr/lib/sbcl/site系统中安装了一堆cruft,它们不会加载,因为FASL与实际安装的sbcl版本不匹配

出于某种原因,这些文件都没有与任何Debian软件包相关联(这是一台运行同一Debian安装已超过十年的旧计算机,它位于Debian Sid上)

我一次删除一个坏的系统,对于大多数系统,Quicklisp做了正确的事情并下载了Quicklisp版本。有时,ASDF会坚持系统应该存在于其以前的路径上,但重新启动SBCL解决了这个问题

但对于一个系统,ASDF已经将其.asd文件的位置持久缓存为/usr/lib/sbcl/site systems/目录。加载此系统是不可能的,因为即使在重新启动SBCL之后,ASDF也不会查看其他任何地方

我试着在/etc/common lisp下查找各种配置文件中指定的所有路径。这些文件都不包含对现在丢失的库的引用

我已经求助于对
/usr
下的所有文件执行
grep-rli
。我不希望在不到一天的时间内完成,而且它可能找不到任何东西,在这种情况下,我将被迫grep整个硬盘,这可能需要一周的时间。希望缓存没有被压缩,因为那样我就永远找不到了


有人知道ASDF是如何保存文件路径的吗?

经过大量艰苦的调试,我发现/usr/lib/sbcl/site systems/中的文件确实存在。它们是断开的符号链接

我删除的文件位于符号链接指向的类似路径/usr/lib/sbcl/site/


删除符号链接修复了所有加载错误。

经过大量艰苦的调试后,我发现/usr/lib/sbcl/site systems/中的文件确实存在。它们是断开的符号链接

我删除的文件位于符号链接指向的类似路径/usr/lib/sbcl/site/


删除符号链接修复了所有加载错误。

关于Quicklisp疑难解答的一些想法,特别是当您的行为异常时:

  • 如果您使用Quicklisp任意时间,最终可能会使用本地软件包,默认情况下可以在此处找到,
    ~/Quicklisp/localprojects
    将您的项目符号链接到该目录中是有效的。当然,如果您曾经重命名过一个项目,请不要忘记创建一个新的符号链接并删除旧的符号链接

  • 同样,如果重命名本地项目,也要删除Quicklisp下次运行时将重新创建的系统索引:
    ~/Quicklisp/local projects/system index.txt
    不时删除它以保持系统新鲜不会有什么坏处

  • 您的
    *.fasl
    文件也可能会过时,删除系统缓存会强制quicklisp重新编译所有内容。在运行SBCL的Ubuntu系统上,这意味着删除以下内容:

  • 尝试更新Quicklisp客户端
  • 可能需要在~/Quicklisp处删除并重新安装Quicklisp本身。(在调试和使用Swanks查找定义功能时,可能会无意中编辑源文件,从而破坏已安装的正常工作的软件包。这并不是说我会做如此粗心的事情。)

  • 另外,不要忘记ASDF会进入目录中查找
    *.asd
    文件。若你们有一个不正确的结构,可能会对你们构建的系统造成严重的破坏。(请参阅我上面关于将本地项目注册到Quicklisp的评论)

  • 最后,不要忘记检查您的lisp init文件,例如
    .sbclrc
    ,是否有任何调试或您可能忘记的快速而肮脏的黑客行为


这些都是曾经为我工作过的事情,希望我不是在延续我的传奇,我不能相信这些事情早就解决了

关于Quicklisp疑难解答的一些想法,特别是当您的行为异常时:

  • 如果您使用Quicklisp任意时间,最终可能会使用本地软件包,默认情况下可以在此处找到,
    ~/Quicklisp/localprojects
    将您的项目符号链接到该目录中是有效的。当然,如果您曾经重命名过一个项目,请不要忘记创建一个新的符号链接并删除旧的符号链接

  • 同样,如果重命名本地项目,也要删除Quicklisp下次运行时将重新创建的系统索引:
    ~/Quicklisp/local projects/system index.txt
    不时删除它以保持系统新鲜不会有什么坏处

  • 您的
    *.fasl
    文件也可能会过时,删除系统缓存会强制quicklisp重新编译所有内容。在运行SBCL的Ubuntu系统上,这意味着删除以下内容:

  • 尝试更新Quicklisp客户端
  • 可能需要在~/Quicklisp处删除并重新安装Quicklisp本身。(在调试和使用Swanks查找定义功能时,可能会无意中编辑源文件,从而破坏已安装的正常工作的软件包。这并不是说我会做如此粗心的事情。)

  • 另外,不要忘记ASDF会进入目录中查找
    *.asd
    文件。若你们有一个不正确的结构,可能会对你们构建的系统造成严重的破坏。(请参阅我上面关于将本地项目注册到Quicklisp的评论)

  • 最后,不要忘记检查您的lisp init文件,例如
    .sbclrc
    ,是否有任何调试或您可能忘记的快速而肮脏的黑客行为

这些都是曾经对我有用的东西,h
rm -rf ~/.cache/common-lisp
(ql:update-client)