2017-05-25 9 views
0

私は(load "foo.import.scm")を持っています。同じディレクトリからプログラムを実行する限り、すべてをコンパイルすると動作します。それ以外の場合は私がチキンスキームを使用してバイナリ実行可能ファイルにモジュールを含めるには

csc -s foo.scm -emit-import-library foo 

、その後

(import foo) 

をすれば、それは罰金コンパイルが、その後について

の文句について "foo.import.scm" を見つけることができない

Error: (open-input-file) cannot open file - No such file or directory: "foo.import.scm" 

文句

Error: (require) cannot load extension: foo 

別のディレクトリ

私は

(use foo) 

を行う場合、私は別のディレクトリからそれを実行したときに、それはおよそ

Error: (require) cannot load extension: foo 

を文句を言います。

このモジュールをプログラムにロードして実行可能ファイルに含める正しい方法は何ですか? cscに別のフラグを渡す必要がありますか?ドキュメントでは解決策がわかりません。

答えて

0

loadは実行時のものです。基本的には(eval (cons 'begin (read-all)))です(CHICKENはloadバイナリ.soファイルも可能です)。 loadは、絶対パスを使用しない限り、常にカレントディレクトリからロードされます。

モジュールをコンパイルしたプログラムで使用する場合は、インポートライブラリをロードしないでください。対応するモジュール(use)がコンパイラによって自動的に実行されます。

プロジェクトの構造について少し説明できますか?問題はどこに行くのかについてはっきりしていません。

+0

プロジェクト構造:同じディレクトリ内に3つのファイル 'main.scm'' foo.scm' 'foo.import.scm' 私は' csc main.scm'それから、結果の実行可能ファイルを他のディレクトリから操作したいと思います。私は 'load'と' use'を 'import'しようとしましたが、ローカルでは動作しますが、他のディレクトリでは動作しません。 – masukomi

+0

これを行うにはいくつかの方法があります:1) 'foo'をグローバルエクステンションとしてインストールしてください。 2)[展開モード](http://wiki.call-cc.org/man/4/Deployment)を使ってローカルディレクトリに 'foo'をインストールし、そのディレクトリに' rpath'を設定します。 3) '-private-repository'を使って' rpath'をインストールしたディレクトリに合わせます。 4)あなたのプログラムを別々にコンパイルし、ユニットとして一緒にリンクしてください([マニュアルの複数ファイルの例]を参照してください)(http://wiki.call-cc.org/man/4/Using%20the%20compiler#an-複数のファイルの例))。 – sjamaan

関連する問題