You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SBCL(WSL1 Ubuntu18.04)安装usocket报sbcl.fasl未找到如何解决

故障环境
  • 系统:WSL1 运行 Ubuntu 18.04.5
  • Lisp实现:SBCL 1.4.5
  • 包管理工具:Quicklisp
故障表现

执行(ql:quickload :dexador)加载dexador库时触发编译错误,核心报错为usocket库的SBCL后端文件编译失败:

COMPILE-FILE-ERROR while
compiling #<CL-SOURCE-FILE "usocket" "backend" "sbcl">
    [Condition of type UIOP/LISP-BUILD:COMPILE-FILE-ERROR]

开启错误断点(setf *break-on-signals* 'error)后单独加载usocket库(ql:quickload :usocket),得到具体错误提示:

Failed to find _Personal_/.cache/common-lisp/sbcl-1.4.5.debian-linux-x64/_Personal_/quicklisp/dists/quicklisp/software/usocket-0.8.4/backend/sbcl.fasl:
  No such file or directory
BREAK was entered because of *BREAK-ON-SIGNALS* (now rebound to NIL)

后续测试确认,所有依赖usocket的库(比如Drakma)加载时都会触发完全相同的报错。

故障根因

WSL1默认会透传Windows系统的HOME环境变量,若Windows侧的用户家目录路径包含空格、特殊字符,ASDF在生成编译缓存路径时会自动将异常路径段替换为_Personal_,导致编译生成的fasl文件存放路径和加载时的查找路径不匹配,最终出现找不到sbcl.fasl的错误。

修复步骤
  • 第一步:清理旧的损坏缓存和残留文件,在WSL终端执行以下命令:
rm -rf ~/quicklisp/dists/quicklisp/software/usocket-*
rm -rf ~/.cache/common-lisp/
  • 第二步:修复WSL环境变量透传问题,打开当前shell的配置文件(bash对应~/.bashrc,zsh对应~/.zshrc),在文件末尾添加以下配置:
unset HOME
export HOME=/home/你的WSL登录用户名

保存退出后执行source ~/.bashrc(zsh对应执行source ~/.zshrc)让配置生效,执行echo $HOME确认输出为WSL内部的Linux家目录路径,而非/mnt/c/Users/开头的Windows挂载路径。

  • 第三步:重启SBCL,在REPL中先执行(ql:quickload :usocket),此时ASDF会将usocket的编译文件输出到正确的缓存路径,不会再出现_Personal_路径替换问题。
  • 第四步:usocket加载无报错后,再执行(ql:quickload :dexador)即可正常加载目标库,其余依赖usocket的库也可正常加载使用。

内容的提问来源于stack exchange,提问作者Koom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:09:48