How to distribute the asdf/quicklisp dependencies

2019-02-26 04:47发布

问题:

I have tried this example ECL repository asdf example , it works fine but it doesn't have any asdf dependencies. If i add

:depends-on (#:inferior-shell)

to example.asd then running the compiled standalone executable gives this error:

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

What causes this error, and what is the idiomatic way of dealing with asdf dependencies on ECL ?

回答1:

EDIT: this problem is fixed for ECL newer than 16.1.3 (fixed in develop branch), so no `require' trick should be needed in the upcoming release.

In general path you have taken is correct.

Make sure, that you have required the ASDF:

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

Then "ASDF/DRIVER" package is defined. On the other hand inferior-shell requires a few other libraries (alexandria for instance), so you have to put the path to them in the ASDF central registry or use the Quicklisp bundles.

More detailed info about building with ECL is available in its Documentation.

// EDIT After investigation it appears that ASDF has to be manually required at the program start. It is probably a bug. As a workaround add

:prologue-code '(require 'asdf)

to the (asdf:make-build …) for standalone executable. Everything works fine then.