Compiled program complaints on absent UIOP/OS and UIOP/PATHNAME
Pascal J. Bourguignon
pjb at informatimago.com
Sun Apr 3 14:04:11 UTC 2016
<svetlyak.40wt at gmail.com> writes:
> Hi, Pascal!
> Thank you for the asnwer.
> The error you wrote about is because you didn't run ./bootstrap.ecl
> before ./build.ecl
> Anyway, I've added -norc to the build scripts. Please, make a pull and
> try again these commands:
> ./jslog --help
[pjb at kuiper :0.0 cl-jslog]$ ./jslog
Condition of type: SIMPLE-ERROR
((UIOP/OS . #<UIOP/OS package>) (UIOP/PATHNAME . #<UIOP/PATHNAME package>))
were referenced in compiled file
but have not been created
1. (IGNORE) Ignore the error, and try the operation again
Top level in: #<process TOP-LEVEL>.
> (find-package "ASDF")
> (find-package "UIOP")
So, as you can see, the packages ASDF and UIOP are not present in the
executable. That's because they are not dependencies of your system.
(Well asdf is mentionned in your asdf, but it's a little special, since
as a dependency of quicklisp itself, it's not downloaded and installed
[pjb at kuiper :0.0 cl-jslog]$ find lisp -name uiop\*
[pjb at kuiper :0.0 cl-jslog]$
uiop hasn't been downloaded, and definitely not loaded.
The same occurs when I add :uiop to your :depends-on list.
When we do:
it's successful, but no uiop is downloaded:
find lisp -name uiop\*
still outputs nothing. The same occurs with sbcl, so it's not related
to the implementation. Probably, what happens is that since uiop is
already loaded (thru asdf, before quicklisp is even loaded),
ql:quickload doesn't do anything for it.
However, I have several versions of uiop installed in my home:
[pjb at kuiper :0.0 cl-jslog]$ find ~/quicklisp -type d -name uiop\*
so it must be possible to have it installed and loaded.
The same error is obtained when I remove :asdf and :uiop from the
:depends-on and try to load them at run-time:
(defun main ()
(funcall (intern "QUICKLOAD" (or (find-package "QL")
(error "No QL package.")))
(handler-case (real-main (symbol-value (intern "*COMMAND-LINE-ARGUMENTS*"
(or (find-package "UIOP")
(error "No UIOP package."))))
(progn (format t "~%Exiting because of the interrupt.~%"))))
Ie. we don't reach the load, (we'd see main in the backtrace if that was
This would lead me to think that there are two problems with ecl:
- contaminating the executable with packages existing at compilation time
not intended for run-time,
- not including the compilation-time package required at run-time into
the executable (independently of the asdf system dependency list).
__Pascal Bourguignon__ http://www.informatimago.com/
“The factory of the future will have only two employees, a man and a
dog. The man will be there to feed the dog. The dog will be there to
keep the man from touching the equipment.” -- Carl Bass CEO Autodesk
More information about the ecl-devel