• ベストアンサー

GNU COMMON LISP

GCLでWindows実行可能なexeファイルを作ることができますか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>linux(Debian)の場合もGCC使うのですか。 いや、使う必要はないと思いますよ。 元々exeファイルそのものがWindowsでしか存在しないんで……。 僕もWindowsのGCL調べてみたんですけど、Windows版のGCL自体が元々minGW経由で動作しているらしく、要するにWindowsネイティブでオブジェクトコードを吐いてくれないのです。 従って、WindowsネイティブのVisual Cであるとか、ないしはBorlandのCコンパイラを媒介にしてコンパイルせざるを得ないのではないか、と思ったのです。 一方、GCL自体はGNUネイティブなんで、そう言う意味ではFreeBSDだろうとDebian GNU/Linuxだろうと、余計な操作はいらずにコンパイルしてそのままオブジェクトコードに変換してくれると思います。 Linux、ないしはFreeBSD上では、あるソース、例えばfib関数だったらGCLにソースを読み込んだ後、 ;;ここから入力 (compile 'fib) ;;ここまで とすればオブジェクトコードへとコンパイルしてくれます。 また、ファイル丸ごとコンパイルする事も可能で、 (compile-file "ファイル名.lsp") とすればいいでしょう。

noname#69788
質問者

お礼

ありがとうございます。

noname#69788
質問者

補足

Windows版でVisual C++ express 2005や2008でコンパイルできますか。

その他の回答 (1)

回答No.1

GCLは使ったことあんまないんで、具体的な事は分からないんですが(大体僕はLinuxユーザー)、原理的には出来る筈です。と言うのも、GCLのコンパイル、ってのはC言語に翻訳する事を指します。 例えば、フィボナッチ数列を表す次のような関数fibをGCLで書きます。 ;;フィボナッチ数列fib。fib.lspとしてファイルを作る。 (defun fib (n) (labels ((iter (i x0 x1) (if (= i n) x0 (iter (1+ i) x1 (+ x0 x1))))) (iter 0 0 1))) ;;ここまで gcl端末上に上のソースをロードして、関数名fibを次のようにdisassembleします。 ;;こう言う風に入力する。 (disassemble 'fib) ;;ここまで。 そうすると、gclは端末上にC言語に翻訳したソースを吐き出します。 /* gclによるdisassemble。続いてアセンブリも吐き出すがそっちは無視。*/ #include "gazonk_29857_0.h" void init_code(){do_init((void *)VV);} /* function definition for FIB */ static void L1() {register object *base=vs_base; register object *sup=base+VM1; VC1 vs_check; vs_top=sup; goto TTL; TTL:; base[1]= small_fixnum(0); base[2]= small_fixnum(0); base[3]= small_fixnum(1); vs_top=(vs_base=base+1)+3; L2(base); return; } /* local function ITER */ static void L2(base0) register object *base0; { register object *base=vs_base; register object *sup=base+VM2; VC2 vs_check; {object V1; object V2; object V3; V1=(base[0]); V2=(base[1]); V3=(base[2]); vs_top=sup; goto TTL; TTL:; if(!(number_compare((V1),base0[0])==0)){ goto T5;} base[3]= (V2); vs_top=(vs_base=base+3)+1; return; goto T5; T5:; V1= one_plus((V1)); {object V4; V4= (V3); V3= number_plus((V2),(V3)); V2= (V4);} goto TTL; return; } } #( #((system::%init . #((system::mf (lisp::quote user::fib) 0) (system::debug (lisp::quote user::fib) (lisp::quote (user::n)))))) ) static void L1(); #define VC1 static void L2(); #define VC2 #define VM2 4 #define VM1 4 static void * VVi[1]={ #define Cdata VV[0] (void *)(L1) }; #define VV (VVi) /* ここまで */ 平たく言うと、このソースをテキストででも保存しておいて、Visual C辺りでコンパイルすればいいのではないか、と思います。

参考URL:
http://next1.cc.it-hiroshima.ac.jp/c/chap1.html
noname#69788
質問者

お礼

ありがとうございます。

noname#69788
質問者

補足

linux(Debian)の場合もGCC使うのですか。

関連するQ&A

専門家に質問してみよう