[gambit-list] Embedding a REPL in an executable
Marc Feeley
feeley at iro.umontreal.ca
Mon Feb 11 11:23:00 EST 2008
On 9-Feb-08, at 4:18 AM, Neil Baylis wrote:
> I'm building an executable that links with an object file that
> controls a machine via the USB bus.
>
> I have this working OK by linking everything into an executable. But
> that means I must recompile every time I make a change to my scheme
> code. Instead, I'd like to be able to load the scheme code at
> runtime. Originally I wanted to compile my c code into a library so
> that I could load it with gsi. However i was unable to get that to
> work.
An example of this is given on page 11 of the Gambit manual. The X11
example (examples/X11-simple) also shows how you can do this.
Briefly, assume you have the Scheme file "s.scm" and the C file "c.c"
and header file "c.h" which "s.scm" is interfacing with:
--------------------------------------------------------
;; File: "s.scm"
(c-declare "#include \"c.h\"")
(define square (c-lambda (int) int "square"))
--------------------------------------------------------
/* File: "c.h" */
int square (int x);
--------------------------------------------------------
/* File: "c.c" */
int square (int x)
{ return x*x; }
--------------------------------------------------------
Then you can simply do this:
% gsc -cc-options "c.c" s.scm
[Note that if you embed the code of c.c in the c-declare of s.scm, you
can avoid the -cc-options "c.c"]
then
% gsi s -
> (square 10)
100
or
% gsi
Gambit v4.2.2
> (load "s")
> (square 10)
100
If you need to include some special header files, or link with a
special C library then something like this is needed:
% gsc -cc-options "-I/usr/include/foo c.c" -ld-options "-L/usr/lib/
foo -lfoo" s.scm
Marc
More information about the Gambit-list
mailing list