Scheme 模块中的鸡肉方案(使用)和(导入)不起作用

Scheme 模块中的鸡肉方案(使用)和(导入)不起作用,scheme,chicken-scheme,Scheme,Chicken Scheme,我在几个项目中遇到过这个问题,但是这个测试用例删除了理解这个问题所不需要的所有东西。我一直在用它来找出问题所在: 因此,我有一个包含两个文件的目录,foo.scm,和bar.scm: ;;;foo.scm (module foo (baz) (import chicken scheme) (define (baz) (display "bazzer!\n"))) baz.scm无法在csi中运行,出现以下错误: Error: (import) during expansion

我在几个项目中遇到过这个问题,但是这个测试用例删除了理解这个问题所不需要的所有东西。我一直在用它来找出问题所在:

因此,我有一个包含两个文件的目录,
foo.scm
,和
bar.scm

;;;foo.scm
(module foo (baz)
  (import chicken scheme)
  (define (baz)
    (display "bazzer!\n")))

baz.scm无法在csi中运行,出现以下错误:

Error: (import) during expansion of (import ...) - cannot import from undefined module: foo
我已经检查了文档:
use
应该将代码加载到内存中,然后导入它。我甚至运行了
require
,函数
use
分别用于加载代码。它运行顺利,只是导入失败了。我还尝试在csi中导入代码
use
不起作用,但
require
后跟
import
起作用,即使这应该等同于
use

简言之,我完全糊涂了。有人能解释一下发生了什么,以及如何修复吗?

(使用foo)
(导入foo)
都将尝试加载一个名为
foo.import.so
foo.import.scm的文件。这是一个所谓的“导入库”,其中包含编译模块所需的信息

这相当于C语言的“头文件”,需要它来实现单独的编译。例如,在交叉编译的情况下,有必要将导入库加载到构建机器上的编译器中,但库本身将加载到目标机器上的程序中

使用
csc
编译foo时,可以使用
-J
-J foo
生成此导入文件


require
过程在运行时工作,这意味着它更像是
load
而不是
use
。我想你把它和
require extension
混淆了,这就像
use

不,我用的是require,因为这是一个需要在后台调用扩展名的过程。检查山雀。另外,我尝试了这个,得到:
错误:未绑定变量:foo#baz
我需要添加另一个编译还是什么?我不知道。如果你遇到了那个错误,你可能只使用了
import
;它表示它知道
baz
应该解析为
foo
模块,但它本身没有实际的定义(意味着它还没有加载代码)。您需要
加载
(或
要求
)和
导入
(或只
使用
)。
Error: (import) during expansion of (import ...) - cannot import from undefined module: foo