プロが教えるわが家の防犯対策術!

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

A 回答 (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")

とすればいいでしょう。

この回答への補足

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

補足日時:2008/01/14 10:46
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2008/01/08 16:11

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

この回答への補足

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

補足日時:2008/01/07 22:23
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2008/01/07 16:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!