2

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

在 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") 不会导致任何错误。

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

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

环境:

  • SBCL 1.1.8
  • OS X 10.8.4
  • 最新的quicklisp
  • 最新的粘液
  • emacs 24.3

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

4

1 回答 1

0

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

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

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

请参阅:在 OSX 上通过 dlopen 打开库时调试崩溃

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

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

于 2013-07-01T07:18:52.010 回答