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

MacOS下用Quicklisp加载Lisp-Stat失败的原因及解决求助

Lisp-Stat安装失败排查与解决(MacOS Monterey + SBCL)

环境信息

  • SBCL 2.2.8
  • Emacs 28.1(Doom Emacs配置)
  • SLIME 2.27
  • MacOS Monterey 12.6

触发操作

执行Common Lisp代码:

(ql:quickload :lisp-stat)

错误输出

; Loading "lisp-stat"
;   caught 1 fatal ERROR condition
Building #P"/Users/stefan/common-lisp/cephes.cl/scipy-cephes/libmd.so"
gcc -g -O2 -Wall -Wno-unused-function -fno-builtin -fPIC -include cephes.h -include math.h   -c -o cbrt.o cbrt.c

完整回溯信息

0: ((:METHOD NO-APPLICABLE-METHOD (T)) #<STANDARD-GENERIC-FUNCTION ASDF/SESSION:SESSION-CACHE (1)> NIL) [fast-method]
 1: (SB-PCL::CALL-NO-APPLICABLE-METHOD #<STANDARD-GENERIC-FUNCTION ASDF/SESSION:SESSION-CACHE (1)> (NIL))
 2: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<FUNCTION (LAMBDA NIL :IN ASDF/OPERATE:OPERATE) {1002DF771B}> :OVERRIDE NIL :KEY NIL :OVERRIDE-CACHE NIL :OVERRIDE-FORCING NIL)
 3: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP "lisp-stat" :VERBOSE NIL) [fast-method]
 4: (ASDF/OPERATE:LOAD-SYSTEM "lisp-stat" :VERBOSE NIL)
 5: (QUICKLISP-CLIENT::CALL-WITH-MACROEXPAND-PROGRESS #<FUNCTION (LAMBDA NIL :IN QUICKLISP-CLIENT::APPLY-LOAD-STRATEGY) {1002DF6AAB}>)
 6: (QUICKLISP-CLIENT::AUTOLOAD-SYSTEM-AND-DEPENDENCIES "lisp-stat" :PROMPT NIL)
 7: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION (T T)) #<unused argument> #<FUNCTION (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {1002CBDA4B}>) [fast-method]
 8: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION :AROUND (QL-IMPL:SBCL T)) #<QL-IMPL:SBCL {1004C6D5C3}> #<FUNCTION (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {1002CBDA4B}>) [fast-m..
 9: ((:METHOD QUICKLISP-CLIENT:QUICKLOAD (T)) :LISP-STAT :PROMPT NIL :SILENT NIL :VERBOSE NIL) [fast-method]
10: (QL-DIST::CALL-WITH-CONSISTENT-DISTS #<FUNCTION (LAMBDA NIL :IN QUICKLISP-CLIENT:QUICKLOAD) {1002CAF0CB}>)
11: (SB-INT:SIMPLE-EVAL-IN-LEXENV (QUICKLISP-CLIENT:QUICKLOAD :LISP-STAT) #<NULL-LEXENV>)
12: (EVAL (QUICKLISP-CLIENT:QUICKLOAD :LISP-STAT))
13: ((LAMBDA NIL :IN SLYNK-MREPL::MREPL-EVAL-1))
14: (SLYNK::CALL-WITH-RETRY-RESTART "Retry SLY mREPL evaluation request." #<FUNCTION (LAMBDA NIL :IN SLYNK-MREPL::MREPL-EVAL-1) {1002CAE0AB}>)
      Locals:
        MSG = "Retry SLY mREPL evaluation request."
        THUNK = #<FUNCTION (LAMBDA () :IN SLYNK-MREPL::MREPL-EVAL-1) {1002CAE0AB}>
15: ((LAMBDA NIL :IN SLYNK-MREPL::MREPL-EVAL-1))
16: ((LAMBDA NIL :IN SLYNK::CALL-WITH-LISTENER))
17: (SLYNK::CALL-WITH-BINDINGS ((*PACKAGE* . #<PACKAGE "COMMON-LISP-USER">) (*DEFAULT-PATHNAME-DEFAULTS* . #P"/Users/stefan/Nextcloud/Dokumente/eBooks/03_Technik/Programmieren/Lisp/") (*) (**) (***) (/) ...
18: (SLYNK-MREPL::MREPL-EVAL-1 #<SLYNK-MREPL::MREPL mrepl-1-1> "(ql:quickload :lisp-stat)")
19: (SLYNK-MREPL::MREPL-EVAL #<SLYNK-MREPL::MREPL mrepl-1-1> "(ql:quickload :lisp-stat)")
20: (SLYNK:PROCESS-REQUESTS NIL)
21: ((LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD))
22: ((LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD))
23: (SLYNK-SBCL::CALL-WITH-BREAK-HOOK #<FUNCTION SLYNK:SLYNK-DEBUGGER-HOOK> #<FUNCTION (LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD) {1001A9800B}>)
24: ((FLET SLYNK-BACKEND:CALL-WITH-DEBUGGER-HOOK :IN "/Users/stefan/.emacs.d/.local/elpa/sly-20220713.1433/slynk/backend/sbcl.lisp") #<FUNCTION SLYNK:SLYNK-DEBUGGER-HOOK> #<FUNCTION (LAMBDA NIL :IN SLYNK:..
25: ((LAMBDA NIL :IN SLYNK::CALL-WITH-LISTENER))
26: (SLYNK::CALL-WITH-BINDINGS ((*PACKAGE* . #<PACKAGE "COMMON-LISP-USER">) (*DEFAULT-PATHNAME-DEFAULTS* . #P"/Users/stefan/Nextcloud/Dokumente/eBooks/03_Technik/Programmieren/Lisp/") (*) (**) (***) (/) ...
27: ((LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD))
28: ((FLET SB-UNIX::BODY :IN SB-THREAD::RUN))
29: ((FLET "WITHOUT-INTERRUPTS-BODY-11" :IN SB-THREAD::RUN))
30: ((FLET SB-UNIX::BODY :IN SB-THREAD::RUN))
31: ((FLET "WITHOUT-INTERRUPTS-BODY-4" :IN SB-THREAD::RUN))
32: (SB-THREAD::RUN)
33: ("foreign function: call_into_lisp_")
34: ("foreign function: funcall1")

问题分析

编译失败核心原因是cephes.cl依赖的C代码在MacOS Monterey环境下编译不兼容:

  • ASDF会话缓存方法调用失败(NO-APPLICABLE-METHOD),说明编译流程中ASDF无法正确处理缓存状态
  • gcc编译命令仅执行到cbrt.c就终止,无后续错误输出,大概率是MacOS默认clang(伪装成gcc)不支持部分编译参数,或是Makefile未适配Monterey环境

解决方案

方案1:替换编译器为clang并手动编译

  1. 进入cephes.cl的C代码目录:
    cd ~/common-lisp/cephes.cl/scipy-cephes/
    
  2. 修改Makefile,将CC=gcc替换为CC=clang
  3. 手动清理并编译动态库:
    make clean
    make libmd.so
    
  4. 回到SBCL REPL重新加载:
    (ql:quickload :lisp-stat)
    

方案2:更新cephes.cl到最新版本

  1. 删除QuickLisp中旧的cephes.cl目录:
    rm -rf ~/common-lisp/cephes.cl/
    
  2. 拉取最新代码:
    git clone https://github.com/Lisp-Stat/cephes.cl.git ~/common-lisp/cephes.cl/
    
  3. 进入子目录编译动态库:
    cd ~/common-lisp/cephes.cl/scipy-cephes/
    make libmd.so
    
  4. 重新加载Lisp-Stat:
    (ql:quickload :lisp-stat)
    

方案3:重置ASDF会话并开启 verbose 模式

如果以上方案无效,先重置ASDF缓存并查看完整编译日志:

(asdf:clear-system "cephes.cl")
(asdf:clear-system "lisp-stat")
(ql:quickload :lisp-stat :verbose t)

verbose模式会输出完整的编译错误信息,方便进一步定位具体问题。

额外注意事项

  • 确保已安装Xcode Command Line Tools:执行xcode-select --install确认
  • Apple Silicon设备需确保终端以Rosetta模式运行(部分旧版C代码不支持ARM架构)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:15:52