Hi,
I do this:
$ clisp -x '(asdf:operate 'asdf:load-op :gsll) (saveinitmem "gsll" :executable t)' $ ./gsll
(gsll:make-chebyshev 1)
FFI::FOREIGN-CALL-OUT: no dynamic object named "gsl_cheb_alloc" in library :DEFAULT
this indicates a bug somewhere between cffi and gsll. specifically, the definition of the foreign function gsl_cheb_alloc should specify that it is to be found in "libgsl.so", not in :default.
moreover, when I do the (not so) trivial thing:
(ffi:default-foreign-language :stdc) (ffi:open-foreign-library "libgslcblas.so") (ffi:def-call-out gsl_cheb_alloc (:library "libgsl.so") (:arguments (n ffi:int)) (:return-type ffi:c-pointer)) (gsl_cheb_alloc 10) ;; ==> #<FOREIGN-ADDRESS #x0000000005503380> (saveinitmem "foo" :executable t) (quit)
./foo (ffi:open-foreign-library "libgslcblas.so") (gsl_cheb_alloc 10) #<FOREIGN-ADDRESS #x0000000001D9F4C0>
i.e., if the foreign function definition includes the correct library name, the function will work automatically[*] even in the saved image.
So, since I am not quite sure where the bug is hiding, I am reporting this to both gsll and cffi lists.
Thanks. Sam.
[*] apparently, libgsl.so cannot be loaded before libgslcblas.so is. how do people specify such dependencies?!