编译一个使用 egg 的文件

Compiling a file that uses an egg

我有以下吃鸡方案代码:

; test.scm
(use coops)
(define-class <Vector2> ()
  (
    (x initform: 0 reader: get-x writer: set-x! )
    (y initform: 0 reader: get-y writer: set-y! )
  )
)

(define v (make <Vector2>))
(print v)
(newline)

运行

$ csc test.scm
$ ./test

给予

#<coops instance of `<Vector2>'>

这是我所期望的。

当我添加

(declare (uses coops))

以上

(use coop)

运行

$ csc test.scm

给予

test.o: In function `f_494':
test.c:(.text+0x908): undefined reference to `C_coops_toplevel'
collect2: error: ld returned 1 exit status

Error: shell command terminated with non-zero exit status 256: 'gcc' 'test.o' -o 'test' -L/usr/local/lib  -Wl,-R'/usr/local/lib' -lchicken -lm -ldl

什么给?提前致谢。

这些声明实际上用于静态 linking。

这里的想法是,编译器将生成对 coops 顶层的调用,以便初始化该单元,但不会 link 编辑到您的程序中(use 将加载并link 在运行时扩展到您的程序中)。

我知道,这令人困惑。至少在 CHICKEN 5 中,这些东西变得更简单了。如果我们没有遇到任何重大障碍,CHICKEN 5 的候选版本将在两周内完成,所以它真的非常接近发布!