[Ecls-list] UPDATE: Embedding ECL - how?
Dr. Edmund Weitz
edi at agharta.de
Tue Jan 22 01:56:03 UTC 2002
I've made a little progress. I wrote a little Lisp file "fac.lisp" for
testing purposes...
(defun fac (n)
(if (= n 0)
1
(* n (fac (1- n)))))
(defun prfac ()
(print (fac 100))
(values))
...and did...
(compile-file "fac.lisp" :system-p t)
My C program 'lib.c' now is...
#include "/usr/local/lib/ecl/h/ecl.h"
void funcall_string_no_args (char *string) {
clLfuncall(1, clLintern(1, make_string_copy(string)));
}
...and I've built my Image with...
(c::build-program "myimage" :lisp-files '("fac.o") :ld-flags '("-L. -lmylib") :epilogue-code "funcall_string_no_args(\"PRFAC\");")
This time it actually works as I hoped it should:
edi at bird:~> ./myimage
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
edi at bird:~>
Fine! Now the questions remains: Is there an easier way call my own
functions? I understand that something like 'clLprfac' will probably
not be possible but is there a reliable way to find out that, say,
PRFAC is mapped to L2? And what will happen with these mappings if I
have more than one Lisp file?
Thanks again,
Edi.
PS: I guess I can answer my question about the :SYSTEM-P parameter
myself now. Looks like it is needed to convice COMPILE-FILE to
generate an .O file instead of an .SO file.
More information about the ecl-devel
mailing list