toge's diary

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

クロスコンパイル環境構築(gcc編)

再びクロスコンパイル環境。なんか混乱してきたので。

bitWalkさんの解説ページ通りに行うと悲しいかな/usr/local/include, /usr/local/libのファイルを上書きしてしまうことが判明。
gccのsnapshotをせこせことコンパイルしている身としてこれは困る。
ついでに今までの教訓もこめてgccのsnapshotについても考えを改めてみる。
以下その作業ログ。

所詮スナップショットなのでライブラリーはLD_LIBRARY_PATHで指定すればいいやと開き直る。
なのでlibdirとかincludedirは標準じゃなくても問題なしにする。
これが一般的なのかどうか全然分かっていないけど。


GCC 4.0.1の場合

./configure --enable-languages=c,c++,java --program-suffix=-4.0.0 --with-gxx-include-dir=/usr/local/gcc/4.0.1/include/g++-v3 --libdir=/usr/local/gcc/4.0.1/lib --includedir=/usr/local/gcc/4.0.1/include --enable-java-awt=gtk,xlib --with-system-zlib --enable-java-gc=boehm --disable-libunwind-exceptions; make; make install

GCC-4.1.0の場合

./configure --enable-languages=c,c++,java --program-suffix=-4.1.0 --with-gxx-include-dir=/usr/local/gcc/4.1.0/include/g++-v3 --libdir=/usr/local/gcc/4.1.0/lib --includedir=/usr/local/gcc/4.1.0/include --enable-java-awt=gtk,xlib --with-system-zlib --enable-java-gc=boehm --disable-libunwind-exceptions; make; make install

さて本題となるi386-ming用です。
上の経験を踏まえてlibdirとincludedirを設定してみる。

./configure --prefix=/usr/local -target=i386-mingw32 --enable-languages=c,c++ --with-gxx-include-dir=/usr/local/i386-mingw32/include/g++-v3 --includedir=/usr/local/i386-mingw32/include --libdir=/usr/local/i386-mingw32/lib; make; make install

さてうまくビルド出来たのでインストールして実験。
-Iでインクルードディレクトリを指定しているのは何故かこのパスを見てくれないため。

> i386-mingw32-g++ foobar.cpp
/usr/local/i386-mingw32/include/g++-v3/clocale:49:20: locale.h: No such file or directory

あれ?/usr/local/i386-mingw32/includeがインクルードパスに入っていない様子。
仕方がないのでインクルードパスを指定してあげます。(ついでにライブラリパスも)

i386-mingw32-g++ -I/usr/local/i386-mingw32/include -L/usr/local/i386-mingw32/lib foobar.cpp
/usr/local/i386-mingw32/lib/gcc/i386-mingw32/3.4.2/../../../../i386-mingw32/bin/ld: crt2.o: No such file: No such file or directory
collect2: ld returned 1 exit status

うぬぬ、/usr/local/i386-mingw32/libにあるcrt2.oを探せない様子。
仕方がないのでcrt2.oをコピーしたところうまくバイナリを作成可能になりました。
でもなんとも汚いなぁ。綺麗な環境を作成する方法を調査中です。