toge's diary

コンピュータ関連の趣味をつらつらと。

MinGW on Linuxの設定中

なんか1年置きにやっているようにも思うけど、MinGW32 on Linuxを設定中です。
以下その作業メモ。

といっても、win2linux wikiにあるようにgcc等をビルドするのはしんどそうなのでパスしちゃいます。
Info/クロスビルド環境の構築

そこで取り出したるは、以前も紹介した(id:toge:20050807#1123428363)ちょっとあやしいrpm。
http://toriniku.sourceforge.net/pspcs.html
で、ぼこぼこと落としてインストール。

次はSDL等々の一般的なライブラリのインストール。
同じく以前紹介した(id:toge:20050423#1114284246)sayさんのバイナリを頂く。
http://cefiro.homelinux.org/resources/list/SDL-binary-mingw32.html

でも、ちょっと困ったことに。この.tar.gzは全部"usr/local/..."というファイル構成になっているけれど、Linuxでそのままルートで展開しようものなら、Linuxgcc環境を破壊してしまう。
ひとまず"/usr/local/i586-mingw32"とか作ってここに"usr/local"以下のファイルをつっこむことにしました。
これの影響を受けて/usr/local/i586-mingw32/bin/sdl-configもprefixを"/usr/local/i586-mingw32"にする必要あり。

で今度は次の問題が、MinGW32なgccが"/usr/local/i586-mingw32"なんてディレクトリを認識しないこと。
おかげでgccを起動するごとに、"-isystem /usr/local/i586-mingw32/include -L /usr/local/i586-mingw32/lib"なんてしないといけない。ちょっとやってられないので、specsファイルに書きこむことにします。

・・・と思ったらspecsファイルって近頃作成しないものなのね。

% gcc -v ~/src/hoge.c
...
Using built-in specs. 

だそうな。

ということでspecsファイルを作成しなければいけなくなりました。
当然1から作るのはしんどいのでbuilt-in specsを貰ってきます。

まずはspecsファイルを置く場所を調べないと・・・。マニュアルを読めば載っていると思いますが、面倒なのでstraceしちゃいます。

% strace -eaccess gcc ../recursive.c 2>&1 | grep specs 

これで出てくるどこかに置いてあげれば良さそうです。一番先頭のパスに置いてあげるのがいいでしょう。

% i586-mingw32-gcc -dumpspecs > /usr/lib/gcc/i586-mingw32/4.0.2/specs 

specsファイルの簡単な弄り方は以下のページを参考に。
http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/compiler.html
この記述が最近のPostgreSQLからは無くなってしまって残念でなりません。

たったこれだけの処理で思いの外上手くコンパイルが進んでいきましたが、やっぱりlinkで失敗・・・。
この問題の原因追求が大変だなぁ。