【发布时间】:2016-12-22 06:06:05
【问题描述】:
我需要编译一个包含多个源文件的 Chicken Scheme 项目,但出现错误。
根据the manual 和this SO answer,我需要将(declare)s 放在我的来源中。为什么编译器不能看到我正在导入另一个源,这超出了我的理解,但是嗯。
问题是,即使我将(declare)s 放入,编译器也会抱怨(import)s 和(use)s。
infinity.filesystem.scm:
(use bindings filepath posix)
(declare (uses infinity.general.scm))
(load-relative "infinity.general.scm")
(module infinity.filesystem (with-open-file make-absolute-path with-temporary-directory with-chdir)
(import scheme filepath posix infinity.general)
(begin-for-syntax
(use bindings chicken)
(import infinity.general))
...etc...
infinity.general.scm:
(declare (unit infinity.general.scm))
(require-extension srfi-1 srfi-13 format data-structures ansi-escape-sequences basic-sequences)
(module infinity.general (bind+ format-ansi repeat-string join-strings pop-chars! inc! dec!
take* drop* take-right* drop-right* ends-with? take-where)
(import scheme chicken srfi-1 srfi-13 data-structures ansi-escape-sequences basic-sequences bindings ports format)
...etc...
命令:
$ csc -uses bindings.o -uses infinity.general.o -c infinity.filesystem.scm -o infinity.filesystem.o
编译器说:
语法错误(导入):无法从未定义的模块导入
和
未绑定变量:使用
如果我只删除“infinity.general”的import 和use 声明,则文件编译。但是,我有两个问题:
- 在没有
import和use子句的情况下,生成的.o文件是否真的有效?还是会在运行时抱怨缺少代码? -
csi要求我的代码包含(import)和(use)声明,而csc要求它不包含。 但是,我要求我的代码在csi和csc中都有效!
请问我该如何解决?
【问题讨论】:
标签: compilation compiler-errors scheme chicken-scheme