我使用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?
环境:
(对不起我的英语,我不是母语人士)
答案 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*
。