在OS X上,使用SLIME,在加载外部库时,劣质lisp停止

时间:2013-06-30 20:06:12

标签: common-lisp ffi slime quicklisp clsql

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

当评估粘液中的(ql:quickload "clsql-postgresql")时,下面的lisp会退出。

史莱姆印刷品

Lisp connection closed unexpectedly: connection broken by remote peer

在迷你缓冲区和

Process inferior-lisp trace/BPT trap: 5

in * inferior-lisp * buffer。

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

我在谷歌搜索过“trace / BPT trap:5”。该消息似乎表明加载动态库时出现问题。我想这个错误是由Slime设置的错误搜索路径引起的。根据{{​​3}},我在裸SBCL和Slime环境中检查了CLSQL:*FOREIGN-LIBRARY-SEARCH-PATHS*,但它们都是nil

为什么在使用Slime时无法加载clsql-postgresql?

环境:

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

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

1 个答案:

答案 0 :(得分:0)

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

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的外部库时,解决方案是评估(ql:quickload "clsql-postgresql")中的*inferior-lisp*,而不是*slime-repl*