複数のソース ファイルを含む Chicken Scheme プロジェクトをコンパイルする必要がありますが、エラーが発生します。
マニュアルとこの SO answerによると、ソースに sを入れる必要があり(declare)
ます。他のソースをインポートしていることをコンパイラが認識できない理由はわかりませんが、まあ。
問題は、s を入れても、コンパイラがs とs(declare)
について文句を言うことです。(import)
(use)
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
and宣言を削除するだけで、ファイルはコンパイルされます。use
ただし、これには2つの問題があります。
- and句がない場合、結果の
.o
ファイルは実際に機能しますか? それとも、実行時に欠落しているコードについて文句を言うでしょうか?import
use
csi
私のコードには宣言が含ま(import)
れている必要がありますが、含まれていない必要があります。ただし、コードがと!の両方で機能する必要があります。(use)
csc
csi
csc
どうすればこれを解決できますか?