2015-12-03 2 views
2

Я пробовал этот пример ECL repository asdf example, он отлично работает, но у него нет зависимостей asdf. Если я добавитьКак распределить зависимости asdf/quicklisp вместе с приложением, скомпилированным с Embeddable Common Lisp?

: зависит-на (#: нижне-оболочки)

к example.asd затем работает скомпилированный исполняемый дает это ошибка:

Condition of type: SIMPLE-PACKAGE-ERROR 
There exists no package with name "ASDF/DRIVER" 
No restarts available. 

Что вызывает эту ошибку, и каков идиоматический способ решения зависимостей asdf от ECL?

ответ

6

EDIT: эта проблема исправлена ​​для ECL новее, чем 16.1.3 (исправлено в ветке разработки), поэтому в предстоящем выпуске не требуется трюк `require '.

В целом путь, который вы взяли, верен.

Убедитесь, что вы потребовали ASDF:

(require 'asdf) 
(find-package "ASDF/DRIVER") 

Затем пакет "ASDF/DRIVER" определяется. С другой стороны, inferior-shell требует несколько других библиотек (например, alexandria), поэтому вам нужно поместить путь к ним в центральный реестр ASDF или использовать Quicklisp bundles.

Более подробную информацию о здании с ECL можно найти в его Documentation.

// ИЗМЕНИТЬ После расследования выясняется, что ASDF необходимо выполнить вручную при запуске программы. Вероятно, это ошибка. В качестве дополнительного решения добавьте

:prologue-code '(require 'asdf) 

к (asdf: make-build ...) для автономного исполняемого файла. Тогда все работает нормально.

+0

Итак, все эти библиотеки asdf должны быть распределены вместе с автономным exe? Я проверю пакеты быстрого поиска. – smokeink

+2

Нет, когда вы компилируете проект, все скомпилируется в исполняемом файле. Но, очевидно, все зависимости должны быть доступны во время компиляции. –

+1

Вещь работает для меня (добавление этой зависимости). ecl -load readme.lisp строит в порядке. FWIW У меня есть Quicklisp в файле .eclc, так что все зависимости доступны ASDF. –