Hi all, I'm trying to compile a simple program using macros but for some reason it won't work.
This is the code in test.scm
(define-syntax while (syntax-rules () ((while condition body ...) (let loop () (if condition (begin body ... (loop)) #f)))))
(define x 0) (while (< x 5) (set! x (+ x 1)) (print x))
When I load the file into the interpreter (with the -:s option) it works, but when I try to compile it (using gambitc -:s -exe test.scm) I get the following error: *** ERROR -- missing or invalid linking information for module "/usr/lib/gambit-c/_gambit" /usr/lib/gcc/x86_64-pc-linux-gnu/6.1.1/../../../../lib/crt1.o: In function `_start': (.text+0x20): undefined reference to `main' test.o: In function `___setup_mod': test.c:(.text+0xa): undefined reference to `___G__20_test' test.o: In function `___init_mod': test.c:(.text+0x26): undefined reference to `___G__20_test' test.o: In function `___H__20_test': test.c:(.text+0x113): undefined reference to `___G__24_sc_2d_put_2d_cte' test.c:(.text+0x181): undefined reference to `___G__24_sc_2d_put_2d_cte' test.c:(.text+0x1a2): undefined reference to `___G__24_sc_2d_put_2d_cte' test.c:(.text+0x1f3): undefined reference to `___G__24_sc_2d_put_2d_cte' test.c:(.text+0x214): undefined reference to `___G_x' test.c:(.text+0x24d): undefined reference to `___G_x' test.c:(.text+0x3a6): undefined reference to `___G_x' test.c:(.text+0x450): undefined reference to `___G_x' test.c:(.text+0x59b): undefined reference to `___G__24_syntax_2d_dispatch' test.c:(.text+0x60f): undefined reference to `___G__24_syntax_2d_dispatch' test.c:(.text+0x6a0): undefined reference to `___G_syntax_2d_error' test.c:(.text+0x6fa): undefined reference to `___G_syntax_2d_error' test.o: In function `____20_test': test.c:(.text+0xd38): undefined reference to `___S__2a_top_2a_' test.c:(.text+0xd46): undefined reference to `___S_any' test.c:(.text+0xd62): undefined reference to `___S_body' test.c:(.text+0xd70): undefined reference to `___S_condition' test.c:(.text+0xd8c): undefined reference to `___S_each_2d_any' test.c:(.text+0xd9a): undefined reference to `___S_global' test.c:(.text+0xdc4): undefined reference to `___S_loop' test.c:(.text+0xdd2): undefined reference to `___S_ribcage' test.c:(.text+0xdee): undefined reference to `___S_syntax_2d_object' test.c:(.text+0xe18): undefined reference to `___S_top_2d_ribcage' test.c:(.text+0xe34): undefined reference to `___S_x' collect2: error: ld returned 1 exit status
I tried compiling with the interactive mode using (compile-file-to-target "test.scm") (quit) gambitc -exe test.c and it compiles well, but when I try to run the exe I get: *** ERROR IN | test| -- Operator is not a PROCEDURE (#!unbound '#(syntax-object while ((top) #(ribcage #(while) #((top)) #(while)))) '#<procedure #2> '*top*)
No matter how hard I try I can't compile any code that makes use of macros. Any help appreciated! (I'm using Arch Linux and I installed gambit from Arch's repositroy, everything else apart from macros works well)