ASDF系统uffi版本不匹配引发CLSQL运行错误的原因及解决方法
问题原因
- ASDF版本匹配采用严格字符串比对:CLSQL-UFFI依赖要求UFFI版本为"2.0",但你安装的UFFI版本是"2.0.0",两者字符串不一致,ASDF判定版本不兼容。
- 即使修改了local-projects里的UFFI版本,ASDF可能仍在使用缓存的旧版本信息,或者Quicklisp仓库版本优先级高于本地项目,导致加载的还是原版本的UFFI。
修复方法
方法一:修改CLSQL-UFFI的依赖版本要求
- 找到Quicklisp中clsql-uffi.asd的路径(通常是
quicklisp/dists/quicklisp/clsql/clsql-uffi.asd) - 打开文件,将依赖项里的
(:version uffi "2.0")修改为(:version uffi "2.0.0"),或者直接简化为uffi(取消版本限制) - 重新加载CLSQL-UFFI系统:
(asdf:load-system :clsql-uffi :force t)
方法二:配置ASDF使用语义化版本匹配
ASDF 3.3.1支持通过配置启用语义化版本比对,让它认为"2.0.0"兼容"2.0":
- 在你的SBCL初始化文件(如
~/.sbclrc)中添加以下代码:
(setf asdf:*version-suffix-separator* ".")
- 重启SBCL,重新加载CLSQL和UFFI系统即可。
方法三:强制加载本地修改后的UFFI版本
- 确认local-projects中的UFFI.asd文件里的版本已改为"2.0"
- 清除ASDF的系统缓存并强制加载本地版本:
(asdf:clear-system :uffi) (ql:register-local-projects) ; 确保本地项目优先级高于Quicklisp仓库 (asdf:load-system :uffi :force t)
- 之后重新加载CLSQL系统:
(asdf:load-system :clsql :force t)
内容的提问来源于stack exchange,提问作者klk2ptx
相关产品推荐
相关产品推荐

