编译一个使用 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 的候选版本将在两周内完成,所以它真的非常接近发布!
我有以下吃鸡方案代码:
; 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 的候选版本将在两周内完成,所以它真的非常接近发布!