编译使用鸡蛋的文件

时间:2018-07-29 14:27:09

标签: chicken-scheme

我有以下鸡肉计划代码:

; 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

有什么作用?预先感谢。

1 个答案:

答案 0 :(得分:1)

这些声明实际上是用于静态链接的。

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

我知道,这很令人困惑。至少在《鸡》 5中,这个东西变得更简单了。如果我们不遇到任何重大障碍,将在两周内完成CHICKEN 5的候选发布,因此它确实非常接近于发布!