Hi,
I'm trying to compile a scheme file that uses Gambit's compiler functions to a standalone executable. Is there any good/obvious way of doing that?
This illustrates my problem:
$ cat t.scm (write compile-file) $ gsc -exe t.scm *** WARNING -- "compile-file" is not defined, *** referenced in: ("/Users/per/prog/gambit/blackhole/tmp/t.c") $ ./t #!unbound
Thanks,
Per Eckerdal
Afficher les réponses par date
On 2011-11-10, at 2:37 PM, Per Eckerdal wrote:
Hi,
I'm trying to compile a scheme file that uses Gambit's compiler functions to a standalone executable. Is there any good/obvious way of doing that?
This illustrates my problem:
$ cat t.scm (write compile-file) $ gsc -exe t.scm *** WARNING -- "compile-file" is not defined, *** referenced in: ("/Users/per/prog/gambit/blackhole/tmp/t.c") $ ./t #!unbound
Because you are linking with more than the base library, you need additional linking steps:
1) explicit linking (with gsc -link) with the link file ~~lib/_gambcgsc.c (this is an incremental link because this link file extends the base library)
2) explicit linking (at the C level) with the library ~~lib/libgambcgsc.a
Here's an example, tested on Mac OS X:
% ls t* t.scm % cat t.scm (pp compile-file) % GAMBCLIBDIR="`gsc -e "(display (path-expand \"~~lib\"))"`" % gsc -link -l "$GAMBCLIBDIR/_gambcgsc.c" t.scm % gsc -obj t_.c t.c t_.c: t.c: % gsc -exe -ld-options "$GAMBCLIBDIR/libgambcgsc.a" t_.o t.o % ./t #<procedure #2 compile-file> % ls t* t t.c t.o t.scm t_.c t_.o
Marc
Thanks, that's exactly what I was looking for!