ラベル クロスコンパイル の投稿を表示しています。 すべての投稿を表示
ラベル クロスコンパイル の投稿を表示しています。 すべての投稿を表示

3.29.2009

coLinux+MinGW+Debian+OpenGLなクロスコンパイル環境でfreeglutを使う

久しぶりの変態環境下での作業に関するメモ。

以前構築したglut環境ではキーボードの同時押しとかが利用できなくてちょっと不便だなぁと思っていたので、その代替え手段を探していたところ、freeglutなる代替え手段が存在することを発見。

通常リリースの最終更新が2005年と、既に枯れていて安定した運用が望めそうなので、さっそく入手。
(かといって開発が停止しているわけではないので、ソコントコよろしく。)
入手すると、中身はソースコードのみ。
ドキュメント曰く、「使うなら自分でビルドしたまえ明智君。」という事らしい。
既に変態環境で使うことをもくろんでいるので、こんなの予想していなかった。

けれども、せっかくやろうと決めたので方策を練る。
んで、実際に試したのが
・ VS2008でビルド
・ 変態環境に移して運用
というもの。結論から言えば、それでうまくいっている。
んで、この文書がその時のメモ。


まずはVS2008でビルド。
これについては特に書くことはないけど、自前でビルドしようと思っている人は、通常のビルドではなく、バッチビルドを実行しなければ正しいファイルを得られないという点に注意。

「自分でビルドするのがめんどい」って人向けに、私の私家製ビルド品をいつものところに置いておきますんで使ってください。
私がやったのはVS2008によるバッチビルドだけで、ソースに関していじったところはない(プロジェクトファイルの変換ぐらいはしたけど)ので、ソースが欲しい人はオリジナルのものを。
ライセンスはXライセンスらしいので、それに従った運用をすればOkだと思う。
(問題があればご連絡ください。)
※ ちなみに配布しているアーカイブ中では、*_d.libってやつがデバッグ版で、_dの無いものがリリース版のビルドなのでお間違いなく。

ヘッダーファイルとライブラリファイルをゲットしたら、まずはヘッダーを以前の記事同様、OpenGLのインクルードファイルを展開したGLディレクトリ以下に放り込む。
ライブラリは、
/usr/i586-mingw32msvc/lib

以下に。
(アーカイブに入っているのは*.aファイルではなく*.libファイルだけれども、特に変換の必要は無く、そのまま利用できる。)

そこまでできたら、適当なソースコードを用意。
今回は前回の記事で使ったのと同じものを利用。


#include <gl/freeglut.h>

void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glColor3d(1.0, 0.0, 0.0); /* red */
glVertex2d(-0.9, -0.9);
glColor3d(0.0, 1.0, 0.0); /* green */
glVertex2d(-0.9, 0.9);
glColor3d(0.0, 0.0, 1.0); /* blue */
glVertex2d( 0.9, 0.9);
glColor3d(1.0, 1.0, 0.0); /* yellow */
glVertex2d( 0.9, -0.9);
glEnd();
glFlush();
}

int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);
glClearColor(0.0, 0.0, 0.0, 0.0);
glutMainLoop();

return 0;
}


ポイントは、#includeにfreeglutを指定すること。
それから、コンパイルのためのコマンドは

mingw-cc gl.c -lfreeglut -lglu32 -lopengl32 -mwindows


などとする。
-lfreeglutの部分は、使うfreeglutなファイルに合わせて変えると良い感じ。
(デバッグ版なら_dをつけるし、スタティックリンク版ならそのようする)

こうしてできたファイルは、実行時にfreeglut.dllを要求するので、そこだけ注意。
glutがglut32.dllを要求したのと同じやね。

※ ここでも、配布しているアーカイブはデバッグ版とリリース版で別名にしているけれど、これは単に衝突しないように&見分けがつくようにとの配慮なので、使うときにはどちらもfreeglut.dllにリネームしないと正しくお動かないので注意

して、できあがったものの実行結果が以下。



使えるAPIについては公式サイトからAPIのリストを確認できるけれども、基本的にはglut互換なので心配なし。
あとは何に使うかが問題か(笑)

8.08.2008

MinGWで自作プログラムにアイコンを付与する方法

15パズルなんですが、うまいぐあいの判定関数&パズル生成関数が思い浮かばなくて、結局ちょこちょこと内部をリファクタリングしただけで、ニコニコを見てしまうという悪循環に(以下略

さて、そんな中で、MinGWでプログラムにアイコンを設定できないものかと思い立ち、ちょろっと探してやってみました。
(すでにダウンロードできる15パズルのファイルは差し替わっています)

ちなみに、(SDLとあわせているせいかもしれませんが)ウィンドウ左上のミニアイコンにはリソースからの設定ができていません。
たぶん、ゲームプログラムならフルスクリーンだったり、左上アイコンにはこだわらないだろうから問題ないんでしょうけど。

一番簡単なのは、
101 ICON "iconfilename.ico"
なんてのを適当なテキストエディタで作成して、resource.rcか何かのファイル名で保存しておきます。

次に、windres(今回私が相手にしているクロスコンパイル環境においては、i586~という長い名前だったので、適当にlnしておきましたよ。)を使って、
$ windres -o resource.o resource.rc
とすると、resource.oというオブジェクトファイルが生成できます。

あとはこれをコンパイル時に渡してあげればOK。
具体的には
$ mingw-cc filename.c resource.o
でいけるはず。
私はリソースIDを101にしたんだけれども、(リソースファイル内にほかのアイコンが無いせいかもしれないが)勝手にデフォルトアイコンとして付与されたから、よっぽど変なことしてない限り、これでいけるんじゃなかろうかと。

よし。今度こそ続きは帰ってきてからやろう。

# 何かいい判定関数/生成関数のアイディアをお持ちでしたら、教えてください。


以下、参考サイト(順不同)
http://www.sixnine.net/cygwin/translation/cygwin-ug-net/windres.html
http://www.m-oz.com/soft/mingw.html
http://www.arcpit.co.jp/winapi/api_01/ap010312.htm

8.01.2008

SDL + DirectX9 + Direct3D + MinGW + Debian/GNU Linux での、DirextX9アプリケーションのクロスコンパイル

フレームレートの計算ばっかりじゃ面白くないなぁと思っていたら、手が勝手に動いてました(笑)
8月一発目のネタがこれとはね。

そんなわけで、やたら長ったらしいタイトルの通り、ド変態クロスコンパイル環境に、さらに変態な環境を付け加えてみようという試み。

まず理解していただきたいのが、DirectXを利用することで、確かに最近の3DCGで話題な機能の恩恵を受けることができるものの、SDLを使う意味はほとんどないということ。
つまり、SDLの利点であるマルチプラットフォームとか、高い移植性とか、そういうのをガン無視できる人だけがやっていい裏ワザ的なものだということ。
(もしマルチプラットフォームを捨てたくないならば、素直にOpenGLを使うべきですよ)

それから、そんなにWindows環境に依存したアプリを書きたいというのなら、素直にクロスコンパイル環境じゃなくてVisual C++とかを使うべきだということ。

この辺を理解していないと、(理解していても)「???」が頭に残る展開になること請け合い。



まず、前準備としてDirectX 9 SDK(以下SDK)をダウンロードしておく。
執筆時点での最新版はMarch 2008。ライブラリファイルを覗くと、すでにd3d10.libとかが用意されてる。違った。よく調べてみると、June 2008が最新らしい。時間があったら差し替えようか…。でも、そんなに大きな変更はないみたいだしなぁ…。悩むなぁ…。)

ダウンロードしておいたSDKを展開して、インストールを開始する。
入れるのはヘッダーとライブラリのセットだけ。
x86版に限れば(SDKにはx64版も付属している)、ヘッダーとライブラリを合わせてzip圧縮かければ、せいぜい3MBちょっと。
それに対してSDK全体の容量は圧縮時で400MB強、展開時で1GB弱。

なぜMicrosoftは必要なものだけダウンロードしてくれる、JavaSDKタイプのインストーラーにしなかったんだろうと小一時間考えたら、インストールしたヘッダーとライブラリをいつもの場所にコピー。
ヘッダーはめんどうならベタでコピーしてもいいけど、私はDXってディレクトリを新たに切って、そこに放りこみましたよ。(ライブラリはベタで放り込んだ)

いつもどおりの事だけど、ライブラリの変換作業とかそんなのは必要なかった。
いつからMinGWはこんなに進化したんだろう?

それが出来たら、チュートリアルサイトを見ながらコードを組む。

あ、WindowsにインストールしたSDKはもう必要ないから、削除してかまわないですよ。

出来上がったらコンパイル。
ここでもコンパイルコマンドには気をつける必要があって、
mingw-c++ filename -lmingw32 -lSDLmain -lSDL -ld3d9 -ld3dx9 -mwindows
のように指定する必要がある。
※ 必ずSDL関連ファイルを先頭に指定するというのがミソ。

あとはできたものをWindowsにコピーして実行すればOK。
サンプルそのままだと、全画面表示になるので注意。

ソースをみてもらえば分かると思うけど、コードはほとんどが通常のをDirectXを使ったプログラミングで使われるものがそのまま使われている。
というのも、DirectX自体、渡されたウィンドウハンドルを持つウィンドウに描画を行うかららしい。

だから実は、SDLで作られていようが、WinAPI直叩きで作られていようが、DirectXさんにとっては何の関係もないものということだ。

それなら私は、ウィンドウ生成が楽チンなSDLを選ぶなぁ。実行時にDLLが必要って手間はあるけどさ。
そうそう、コンパイルしたバイナリを動かすには、最新のDirectXランタイムが必要だから、動かない場合はそちらをインストールするとよさげ。

7.28.2008

ズンチャカチャ♪ズンチャカチャ♪

帰りの車中で爆睡しながら、SDLの夢を見ました。

さて、今日も今日とて寝る前のLesson11。
今回はSDL_mixerを使うようで、ちゃんとインストールがうまくいってるかを確かめるいいチャンスになりそう。

そんなわけでざくっとコーディング。
いつもは配布されてるlesson[nn].zipファイルなんて持ってこないんだけど、今回は音素材をもらうためにダウンロード。

音素材は軽快なパーカッションの音源だった。
これなら、ゲーム素材配布サイトで探してもよかったかなぁ?

んで、例によって文字はみかちゃんフォントで描画。
みかちゃん好きになりそう(笑)

いつものように、オプションとして -lSDL_mixer を使わないとコンパイルが通らないので注意。
あと、Mix_PlayingMusic()関数とMix_PlayMusic()関数、Mix_PausedMusic()関数とMix_PauseMusic()関数など、SDL_mixerは紛らわしい関数名多すぎ。
関数名だけで10分ぐらいハマった。

引数の数が違う関数名のタイプミスなら、コンパイラが教えてくれるからいいけど、Mix_PausedMusic()とMix_PauseMusic()はどちらも引数なしで呼び出せるタイプの関数だったから、実行してから思い通りの動きをしてないことに気づくまで、間違っていることに気がつかなかった。
こういうの、潜在的なバグっていうんだろうね。

本当は、動画で音とか出せてるとカチョイイんだろうけど、めんどいからやらない。
というわけで、動いてる様子画像。

7.27.2008

SDL_gfx for Windows (and MinGW??)

SDL_gfxを試してみようかと思ったんだけど、いかんせん公式サイトじゃソースが配布されているだけで、Windows向けlibファイルとか、dllなんかが配布されていない。

で、みんなどうしてるのかと思って探してみたら、どうやらソースから自前でコンパイルしているらしい。
(なんて面倒なことを…)

きっと、ネット上にはそんな迷える私のために、コンパイル済みライブラリを配布してくれている親切な人がいるはずだと思って探してみるも、古いバージョンばかりが見つかる。

古いバージョンで我慢するかな・・・と思っていたところに、JessePなる人物が、2008/7/9付(ついこないだ!)で、最新と思しきSDL_gfxのコンパイル済みライブラリを作ったって、SDLのMLに投稿してた。

これを使わない手はないと思って、さっそくインストール。
(手順はSDL_imageなんかと同じ。)
で、入れたところで力尽きて、まだ試していない(笑)

時間があったら試そう。(どうやら、VC向けにコンパイルされたものらしいから、MinGWじゃだめかもしらんし。)

あと、そこで配布されていたものにはSDL_gfxのヘッダーファイルが含まれていなかったから、勝手に含ませてzipで固めて配布。
LGPLだし、問題ないよね?

(配布物に含まれているのは2.0.17のヘッダーだけど、DLLとlibがそれに対応していない可能性大。{←まだ試していないことに起因する}そんなわけで、もしうごかねーぞ、コンパイルとおらねーぞという問題が出たら教えてください。{&古いバージョンのSDL_gfxライブラリに切り替えればイケる可能性大なので、あきらめないでください})


# 以下、別文の機械翻訳

I need the SDL_gfx pre compiled library.

But, that library not distribute from the official SDL_gfx web site.

Today, I found the web, and I got that files.

Relation:
[I made below zip file include SDL_gfx header files]
[libsdl.org ML archives]
[JesseP's web site]
[SDL_gfx official web site]

7.23.2008

coLinux + Debian + MinGW + SDL のクロスコンパイル環境で、SDL_imageを使う。

相変わらず資料が少ないこの問題に取り組んでいる。
普通の人のやらないことっておもしろいじゃない?

んで、今日はSDLに機能拡張を施すSDL_imageやらSDL_mixerやらSDL_ttfやらを扱うにはどうしたらいいか?
という問題。

で、とりあえず今日取り組んだのはSDL_imageを使う方法。
公式サイトにはMinGW向けアーカイブがない。
となるとソースからコンパイルするべきか…?

とも考えてしまいがちだけど、レッスンサイト曰くVC8向けのもので良いらしい。

で、VC8向けのdevelパッケージをとってきたらunzipする。
古いMinGW向け情報だと、ここで*.libを*.aに変換するなんて話題が出てくるけど、この件に関して言えば、それは無視してOK。

unzipした中から、include/以下をいつものSDLのインクルードファイルが置いてあるディレクトリに、lib/以下の*.libファイルを、いつものSDLのライブラリファイルが置いてあるディレクトリに配置する。

で、lib/ディレクトリ以下にある*.dllファイルは、Windowsに送っておく。
(レッスンサイトにもあるけど、これらのDLLは、プログラム本体の配布時に一緒に配布しないといけない。さらに予断だけど、libpngとかzlibなんてのは、配布ライセンスが自前のプログラムと異なったりするから、zlibやlibpng(それだけに限らないだろうけど)のライセンスは、ゲーム本体と違いますよ!ってのを明記するべきだと思う。)

ここまで出来たら、プログラムを書く。とはいっても、Load_BMP関数をIMG_Load関数に置き換えるだけ。
前者がBMP専用なのに対して、後者が汎用だと思えばいい。
そうそう、読み込むファイル名の調整も忘れないように。
(違いを理解するために、PNGファイルを別に用意したほうがいいかも。)

(私のようにものぐさで)Lesson2のプログラムを流用しているならば、またもや2秒間、指定した画像を擁したウィンドウが表示されるはず。



但し、ここでまたもや注意があって、それはコンパイルオプションをきちんと指定しないといけないということ。
これまでの段階で、SDLのコンパイルコマンドをスクリプトに直している人なら、(スクリプトファイル名をsdlcppとした場合)
$ sdlcpp [filename] -lSDL_image
ではダメで、sdlcppの中身を直接いじって、
mingw-cpp $1 -lmingw32 -lSDLmain -lSDL -lSDL_image -mwindows
のようにしなければいけないということ。
(SDL_imageぐらいなら毎回使うから、こうしてスクリプトを修正してもいいかもしれないが、ほかのライブラリの場合には、状況によって考える必要があるかも。)

さて、もしもこの手順を守らないでコンパイルするとどうなるか?
それは、_IMG_Loadへの参照が見つからないという旨のエラーになった。(少なくとも我が家では)

(実は、これにつまづいて、ここに到達するまでに非常に時間がかかった。*.libは使えないんじゃないかとか、*.aに変換する必要があるのかとか、そんな無駄な考えを起こしてしまった。reimpがdebianのaptで入れた一連のmingw32関連パッケージには含まれておらず、急遽windows側でgnu-utilsとmingw32-utilsを取り寄せて、ライブラリを変換できるように頑張ってみたりとか。でも、結局それはいらない作業だったってことがわかった。なぜならVC8用として配布されているlibパッケージも、そのままリンクすることができるんだもの。)

7.20.2008

coLinux + Debian + MinGW + SDL のクロスコンパイル環境を構築

これまでに、OpenGLが扱える環境を構築してきたので、こんどはそこにSDLの使える環境を追加するという、変態的環境構築。

相変わらず、こちらを参考にさせていただく。

まずはDirectX-develなパッケージをもってきてインストール。
http://www.libsdl.org/extras/win32/common/
インストールとはいっても、/usr/i586-~/include と 同lib/に、展開したパッケージのinclude/以下およびlib/以下をコピーするだけ。
これで、DirectX+SDLなプログラムを、Debian上でコンパイルすることが可能になる。

次に、SDLをとってくる。
SDLオフィシャルサイト
執筆時点では1.2.13が最新安定板だった。

ここで間違っちゃいけないのが、ソースコードをとってきたり、Linux向けdevelパッケージをとってこないこと。
(実はソースなら、Makefileをいじることで対応できなくはないが、めんどいので出来合いのものを使う。)

必要なのはDevelopment Libraries:のWin32項目にある、SDL-devel-1.2.13-mingw32.tar.gzというパッケージ。
なぜなら、コンパイルはLinux上でするけれど、動かすのはWindows上だから。
(VC用のパッケージは、ライブラリの形式が違うから使えないので、そちらも注意。)

ここからとってきたら、tarでSDL-devel-1.2.13-mingw32.tar.gzを展開する。
開くといろいろ出てくるけど、必要なのはinclude/以下のSDLディレクトリとその中に含まれるファイルと、lib/ディレクトリ以下のライブラリのみ。

これを、OpenGLの回よろしく、/usr/i586-~/include/ と /usr/i586-~/lib/ 以下にコピーする。
includeファイルに関しては、SDLディレクトリの中身をぶちまけないことがポイント。

ここまで出来たら準備はOK。
http://lazyfoo.net/SDL_tutorials/lesson02/index.php
のチュートリアルを参考に、テストコードを書く。

よくSDLのサイトで引き合いに出されるtestディレクトリ以下のテストコードは、変態環境においてはあまりあてにならないので注意。

コードが書けた(あるいはダウンロードしてきた)ら、それをコンパイルする。
コンパイルのためのコマンドは、(ここまででmingw-c++をMinGWのC++コンパイラに対するリンクとして定義しているはずなので)
$ mingw-c++ filename -lmingw32 -lSDLmain -lSDL -mwindows
を使う。
コンパイルオプションの指定順序を間違うと、WinMain16@が見つからねーよ!というエラーに遭遇するので注意。(ただし、-lSDLmain と -lSDLの順序は逆でもよさげ)

例によって、これを適当なスクリプトに落して、/home/username/binあたりに保存しておくと使いやすくなる。

これでコンパイルができたら、Windowsに出来上がったファイルをコピーする。
Windows上ではこのプログラムの実行にSDL.dllが必要なので、どこかから落としておくか、さっき落としてきたDevLibに含まれているものを、Windows上に送っておく。

うまくいけば、チュートリアルサイトで示されているような画面が、2秒間表示されるはず。
ここまでいけば、一応うまくいっているといえるんじゃないかと思う。

#追記:画像があったほうがわかりやすいかと思ったのでアップ。
うまくいくと、↓のような画面が2秒間表示されるハズ。



わー。うまくいった。ハッピーハッピー。

7.16.2008

MinGW + coLinux + Debian + OpenGL のクロスコンパイル環境で日本語を扱う。

タイトル長いけど、先日作った環境において、日本語を扱うにはどうしたらいいか?っていう話。

結論からいえば、
 $ nkf -s [original_filename] > [output_filename]
というスタイルにすればよし。

つまり、解説したようにして導入したMinGWコンパイラは、SJISなら日本語が扱えるように作られているということ。

それに対して構築したDebian環境はUTF-8を文字コードとして選択しているから、そのままコンパイルに通してしまうと日本語が文字化けする。

したがって、日本語を含んでいるUTF-8なりEUC-JPでエンコされたソースコードを、nkfなりなんなりでSJISに変換してからコンパイルを通してやればOK。

これはOpenGLに限った話ではなく、コンソールで日本語を使うときも同じだけど、自分があんまりコンソール上で日本語を使うことがないので、OpenGLも含めた環境に対してメモしておく。

「俺はプログラムの表示メッセージは、可能な限り日本語にする派だ。いちいち変換なんて面倒だ。」という方は、シェルスクリプトを組めばいいと思う。




# なんにせよ眠い。

7.14.2008

Linux/Windowsのクロスコンパイル環境の構築2

つづき。

http://www.libsdl.org/extras/win32/common/opengl-devel.tar.gz
から、OpenGLのヘッダーファイルをもってくる。

tarで展開して、/usr/i586-mingw32msvc/include/下に、展開したヘッダーをコピー。

次に、glutを放り込む。
ナマのOpenGLたたくより便利だろうから。
そんなわけで、
http://www.rimath.saitama-u.ac.jp/lab.jp/tsakurai/opengl/mingw-lib/
からglut.hをとってきて、OpenGLのヘッダーを叩き込んだところに同居させる。

こちらのサイトにあるサンプルソースを拝借して、適当にテスト用のCプログラムを書く。
書けたら、
$ mingw-cc filename -lglut32 -lglu32 -lopengl32 -mwindows
などとしてコンパイル。
できあがったファイルを、Windowsにもっていく。

Windowsサイドでは、
ftp://ftp.sgi.com/sgi/opengl/glut/glutdlls.zip
あたりからdllをもってきて保存。そして展開しておく。
展開したら、パスの通ったディレクトリか、さっきWindows側にもってきた、Linuxで作ったexeファイルのある場所と同じ場所に、glut32.dllとglut.dllをコピーする。

ここまでできたら、持ってきたexeを実行する。
で、下図のようになればOK。うれしいたのしい。ハッピーハッピー。

Linux/Windowsのクロスコンパイル環境の構築1

というわけで、coLinux+Debian(Lenny)+mingw-cc+OepnGLで、Windows上で動くOpenGLアプリをcoLinux上で作れる環境を整えてみようっていう話。

以前にetch上で整えたときに、時間があればまとめる的な話をしつつ、まったく手をつけていなかったのに、今回の再インストールという事態になったため、早めに残しておくことに。

まずは

# apt-get install mingw32 mingw32-binutils mingw32-runtime
で、必要なものを放り込む。

次に、
# locate mingw32
して、mingw32コンパイラなどの関連ファイルを見つける。
我が家のcoLinux+Debianでは、/usr/bin/i586-mingw32msvc-*としてコンパイラ群がインストールされていた。

そこで、これに対してシンボリックリンクを作成し、コンパイルの時打ち込むコマンドが少なくて済むようにする。
私はmingw-ccをCコンパイラに、mingw-c++をC++コンパイラに割り当てた。
全体で使うなら、コンパイラのあるディレクトリ内に一緒にシンボリックリンクを作成してもいいけど
個人で使うだけなら/home/user_name/binあたりに置いとくほうがいいかも。

リンクをはったら、
$ mingw-cc --version
とかして、うまくいってることを確認。

うまくいっていたら、Hello world.あたりを書いてコンパイルする。
コンパイルしてできたファイル(デフォルトならa.exe)をWindowsに移動させ、実行する。

うまくいったら、クロスコンパイル環境はできあがり。
(ここまでうまくいってれば、mathライブラリを使うときのコンパイルオプション-lmとかも普通に通るはず。)

まずはここまで。
OpenGL導入は次の記事で。

6.04.2008

上手にできました~!

MinGW+Linux+OpenGL+glut環境での、Windows向けプログラムのクロスコンパイル環境の構築。

http://members3.jcom.home.ne.jp/mediafish/img/gl.png

こちらサンプルプログラムを利用した実行結果が上記の物。

簡単に言えば、前回の記事で整えたクロスコンパイル環境に、OpenGLとglutを追加したもの。

…なんですが、この「Windows上では窓を出したいけど、Linux上ではCUIのみ」かつ「そこでOpenGLを使ったプログラムをクロスコンパイルしたい」ってな要望に応えてくれるサイトはなかなか見つからず、いくつかのサイトをかけずり回ってようやく整いました(;´Д`)
(実は以前にチャレンジするも失敗していて、それをブログに書いた気でいたのですが、記事を探してみたら書いてなかったみたいです。)

そのうち暇があればまとめる予定。
なにはともあれ、これでしばらくは遊べそうだ。

4.26.2008

クロスコンパイル環境を整えてみる

せっかくcoLinux用のディスク領域を広げたので、MinGWを使ってクロスコンパイル環境を整え、開発関係は(C#やDelphiといったGUIアプリを除いて)Linux上で行えるようにした。

デュアルブート環境なんかと違って、シームレスに連携できるのが嬉しいよね。
# apt-get install mingw32 mingw32-binutils mingw32-runtime
として必要なパッケージを入手。Debianってこういうところが便利だよね。


で、入手したはいいけれど、gccの起動コマンドがわからない。
mingw32-gcc、gcc -mwindows、mingw-gcc....
色々試してみたけどだめで、結局ディスク内を検索。こういうときにupdatedb+locateのコンビのありがたさがわかる(笑)
で、見つかったコマンドは
i586-mingw32msvc-*
というコマンド群。。。。


長すぎるだろ。常識的に考えて(笑)
短いコマンドにぱぱっとリンクぐらい貼ってくれれば良いのに。。。
そんなわけで、普段使うコマンドはmigw32-*で起動できるようにシンボリックリンクを貼った。

コンパイルそのものには支障が無く、開発環境としてもイイカンジ。

### 追記

gcc に -mwindows オプションをつけることで、GUI をもった Windows プログラム(いわゆるWinAPIを使ったプログラム)をコンパイルできるようだ。

このオプションなしでコンパイルすると、実行可能なexeファイルを生成できるものの、コマンドプロンプトのウィンドウが出てきてしまう。

printfなどでデバック情報を出力させるなら便利かもしれないけれども、そうでもない限り、-mwindowsオプションは忘れずにつけたほうがよさそうな感じ。