На OS X с SLIME нижний lisp останавливался при загрузке сторонних библиотек

Я использую Quicklisp для загрузки систем и отлаживаю свой код с помощью Slime. Quicklisp успешно загружает многие системы, кроме cl-postgresql.

При оценке (ql:quickload "clsql-postgresql") в слизи нижний лисп выходит.

Отпечатки слизи

Lisp connection closed unexpectedly: connection broken by remote peer

в минибуфере и

Process inferior-lisp trace/BPT trap: 5

в буфере * inferior-lisp *.

Но вычисление (ql:quickload "clsql-postgresql") в SBCL без Slime не вызовет никакой ошибки.

Я искал "Trap /BPT trap: 5" с Google. Похоже, сообщение указывает на проблемы с загрузкой динамических библиотек. Я предполагаю, что ошибка вызвана неправильными путями поиска, установленными Slime. Согласно http://clsql.b9.com/manual/appendix.html, я проверил CLSQL:*FOREIGN-LIBRARY-SEARCH-PATHS* в голой среде SBCL и Slime, но они оба были nil,

Почему clsql-postgresql не загружается при использовании Slime?

Среда:

  • SBCL 1.1.8
  • OS X 10.8.4
  • последний быстрый список
  • последняя слизь
  • Emacs 24,3

(извините за мой английский, я не являюсь носителем языка)

1 ответ

Решение

Я проверил диагностический отчет пользователя. И я нашел следующие строки:

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

Так что я погуглил "CoreFoundation". Он сказал, что CoreFoundation должен быть загружен основным потоком, в противном случае он будет сигнализировать SIGTRAP. Это правило OS X.

Смотрите: Отладка сбоя при открытии библиотеки через dlopen в OSX

В голом SBCL, ql:quickload напрямую оценивается в основном потоке. Но в SLIME формы оцениваются с помощью отдельного потока, запускаемого SWANK.

Решение состоит в том, чтобы оценить (ql:quickload "clsql-postgresql") в *inferior-lisp*, вместо *slime-repl*, когда libpg - первая сторонняя библиотека, зависящая от загружаемого CoreFoundation.

Другие вопросы по тегам