こんばんは、川合です。 以前、MinGWでコンパイルしてlcc-win32のリンカでリンクするという 変則技を使っていましたが、あれはMinGWが.commや.lcomなどというセク ションを生成するので、駄目なケースもありました。 しかしgo_0001wは.commや.lcomを生成しないので、この変則技が結構 安定するようです。ということで、具体的なやり方を紹介します。 まず、普通にソースを書きます。たとえばこれを、hello.cとしましょ う。 このソースのmain()関数をmain0()と書き換えます。そして以下の手 順でコンパイルします。 prompt>cc1 -Os -quiet -Ie:/lccwin32/include -o hello.s hello.c ここで-Iオプションはlcc-win32のインクルードパスを指定します。 さらにアセンブルもします。 prompt>as -o hello.obj hello.s 単純明快ですね。 それで、次にcallmain.cを作ります。作り方はこのとおり。 --- int main0(int argc, char **argv); int main(int argc, char **argv) { return main0(argc, argv); } --- ご覧の通り、やっていることはただmain0を呼び出すだけです。これ をlccでコンパイルしてcallmain.objを作っておきます。 ここまできたら、後はリンクするだけ。 prompt>lcclnk -s -subsystem console -o hello.exe callmain.obj hello.obj tcconio.lib とします。完成です。場合によってはlcc-win32だけで作るよりもコン パクトになります。うーん、good!(笑)。 まず明らかに分かるとおり、main0()はintを返してargcやargvを引数 に取るようにしてあげてください。そうでないとcallmain.objが困りま す。 callmain.objをわざわざ作るのは、もちろんlccのスタートアップル ーチンとの整合性のためです。インクルードファイルにlccのを使うの はライブラリの整合性のためです。 callmain.objさえあれば、コンパイラとしてのlccはいりません。cal lmain.objは僕が作ったのがあるので、それを公開するとすれば、lccの includeとリンカとライブラリだけのバージョンがほしくなりますね( 笑)。 なお、この方法をgo_0001sに使うことはできません。go_0001sはその ままではlcc-win32のincludeに無いようなライブラリを要求するので。 僕がやっているような改造が必要になります。これについては、go_000 2sをお待ちください。 それでは。 -- 川合 秀実(KAWAI Hidemi) OSASK計画代表 / システム設計開発担当 E-mail:kawai !Atmark! imasy.org Homepage http://www.imasy.org/~kawai/