2013-06-30 36 views
2

我使用Quicklisp加載系統,並使用Slime調試我的代碼。除cl-postgresql外,Quicklisp成功加載了許多系統。在帶有SLIME的OS X上,加載外部庫時劣勢lisp停止

當在泥漿中評估(ql:quickload "clsql-postgresql")時,劣勢lisp退出。

煤泥打印

Lisp connection closed unexpectedly: connection broken by remote peer 
在小緩衝區

Process inferior-lisp trace/BPT trap: 5 

在*劣-口齒不清*緩衝液中。

但是在沒有Slime的SBCL中評估(ql:quickload「clsql-postgresql」)不會導致任何錯誤。

我用Google搜索了「trace/BPT trap:5」。該消息似乎表明加載動態庫時存在問題。我想這個錯誤是由Slime設置的錯誤搜索路徑引起的。根據http://clsql.b9.com/manual/appendix.html,我在裸SBCL和史萊姆環境中檢查了CLSQL:*FOREIGN-LIBRARY-SEARCH-PATHS*,但他們都是nil

爲什麼在使用Slime時clsql-postgresql無法加載?

環境:

  • SBCL 1.1.8
  • OS X 10.8.4
  • 最新quicklisp
  • 最新煤泥
  • emacs的24.3

(對不起,我的英語水平,我不是母語的人)

回答

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啓動的單獨線程進行評估。

解決的辦法是在*inferior-lisp*而不是*slime-repl*的情況下評估(ql:quickload "clsql-postgresql"),此時libpg是取決於要加載的CoreFoundation的第一個外部庫。

相關問題