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")
とすればいいでしょう。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(セキュリティ) exeファイルの個人情報について 3 2023/06/29 17:36
- その他(ソフトウェア) Emacsメニューの日本語化について 1 2023/06/16 15:52
- アプリ アプリケーションが見つかりません 2 2022/07/13 21:07
- その他(プログラミング・Web制作) Windowsのメモ帳でジョークウイルスが作りたいです。 3 2022/06/04 12:17
- その他(プログラミング・Web制作) Windowsのメモ帳でジョークウイルスが作りたいです。 1 2022/06/04 11:30
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- その他(IT・Webサービス) エクセルの実行ファイルについての質問です。 1 2023/05/04 03:58
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
- マルウェア・コンピュータウイルス トロイの木馬が検出されました。 1 2022/06/12 22:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
” OS ビルド ” の意味が分か...
-
ILSpyで、デコンパイルできない。
-
戻り値について
-
「fatal error C1189」を回避す...
-
エクセルVBAではRound...
-
VBAを何回も作り直して、容量が...
-
C言語でmからnまでの合計を求め...
-
<math.h>があるのにsqrtが・...
-
C++コンパイル時に『 C1083: in...
-
bccでwinmm.libをリンクする方...
-
不要な #include
-
RPGでプログラムからソースファ...
-
セミコロンについて
-
VMwareのLinuxでコンパイルでき...
-
C言語でヘッダファイルにグロー...
-
windowsでLinuxで作成したソー...
-
コンパイルエラー:ユーザ定義...
-
C#のコマンドラインの分割コ...
-
漢字のコメントをはずすとコン...
-
他のLinuxでも動くa.outの作り方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAを何回も作り直して、容量が...
-
<math.h>があるのにsqrtが・...
-
” OS ビルド ” の意味が分か...
-
Makefile作成時の拡張子.oとは?
-
「fatal error C1189」を回避す...
-
1 つ以上の複数回定義されてい...
-
ILSpyで、デコンパイルできない。
-
C言語でヘッダファイルにグロー...
-
エクセルVBAではRound...
-
セミコロンについて
-
マクロ コンパイルがグレーバック
-
C++コンパイル時に『 C1083: in...
-
外部シンボル "_main"は未解決です
-
PRO*C コンパイルエラー
-
コンパイルエラー:ユーザ定義...
-
クリティカルエラー Expressio...
-
ビルドとリビルドの違いを教え...
-
RPGでプログラムからソースファ...
-
戻り値について
-
C++のhppファイルをCでinclude
おすすめ情報