【问题标题】:On OS X, with SLIME, inferior lisp stopped when loading foreign libraries在 OS X 上,使用 SLIME,加载外部库时劣质 lisp 停止
【发布时间】:2013-06-30 20:06:12
【问题描述】:

我使用 Quicklisp 加载系统,并使用 Slime 调试我的代码。除了 cl-postgresql,Quicklisp 成功加载了许多系统。

在 slime 中评估 (ql:quickload "clsql-postgresql") 时,劣质 lisp 退出。

粘液印

Lisp connection closed unexpectedly: connection broken by remote peer

在小缓冲区和

Process inferior-lisp trace/BPT trap: 5

在 *inferior-lisp* 缓冲区中。

但是在没有 Slime 的情况下在 SBCL 中评估 (ql:quickload "clsql-postgresql") 不会导致任何错误。

我已经用 Google 搜索了“trace/BPT 陷阱:5”。该消息似乎表明加载动态库时出现问题。我想这个错误是由 Slime 设置的错误搜索路径引起的。根据http://clsql.b9.com/manual/appendix.html,我在裸SBCL和Slime环境中检查了CLSQL:*FOREIGN-LIBRARY-SEARCH-PATHS*,但它们都是nil

为什么使用 Slime 时 clsql-postgresql 加载失败?

环境:

  • SBCL 1.1.8
  • OS X 10.8.4
  • 最新的 quicklisp
  • 最新的史莱姆
  • emacs 24.3

(对不起我的英语,我不是母语)

【问题讨论】:

    标签: common-lisp ffi slime quicklisp clsql


    【解决方案1】:

    我检查了用户诊断报告。我发现了以下几行:

    Thread 7 Crashed:
    0   com.apple.CoreFoundation        0x00007fff8fab52d5 __CFInitialize + 69
    1   dyld                            0x00007fff6f56d256 
    

    所以我用谷歌搜索了“CoreFoundation”。它说CoreFoundation必须由主线程加载,否则会发出SIGTRAP信号。这是 OS X 的规则。

    见:Debugging a crash when a library is opened via dlopen on OSX

    在裸 SBCL 中,ql:quickload 直接在主线程中计算。但在 SLIME 下,表单是使用由 SWANK 启动的单独线程评估的。

    当 libpg 是要加载的依赖于 CoreFoundation 的第一个外部库时,解决方案是在 *inferior-lisp* 中评估 (ql:quickload "clsql-postgresql"),而不是 *slime-repl*

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多