2001年夏 linux と Windows の UIを つくろうかと 思い立つ
しかし、MFC いれて 作っても良いけど できれば 一回で 終らせたいなぁ〜
とかとか 思ったりするので、クロスコンパイルできるようにしたいぞっと

環境は redhat 7.1 gcc 2.95.3 を いれています。(2.96は やん茶坊主なので)

というのが きっかけです。

条件としては、

と いったところです。

どうも、MinGW というのがあるようなので、
まずは ソースをとって来る。

新しく version 1.1 が でたので、新しいインストールのページを作ってみました。

ソースの場所

- MinGW-1.0.1-20010726.tar.gz 
- Win32API-1.0-20010606-src.tar.gz
- Binutils-2.11.90-20010705-src.tar.gz 
- gcc-2.95.3-20010723.src.tar.gz

の 最新版 を とってくる。
(上記は 2001年8月1日現在)

1. MinGW から 必要な部分だけ コピーする。

mkdir /var/tmp/mingw
cd /var/tmp/mingw
tar -xvzf Mingw-1.0.1-20010726.tar.gz 

で解凍する。
root で
mkdir -p /usr/local/mingw32/i386-mingw32/include
mkdir -p /usr/local/mingw32/i386-mingw32/lib
cp -rp include/* /usr/local/mingw32/i386-mingw32/include
cp -rp lib/* /usr/local/mingw32/i386-mingw32/lib

2. 次に Win32API の 必要な部分を コピーする

mkdir win32api
cd win32api
tar -xvzf w32api-1.0-20010606-src.tar.gz
cd w32api-1.0-20010606
cp -rpf include/* /usr/local/mingw32/i386-mingw32/include
cp -rpf lib/* /usr/local/mingw32/i386-mingw32/lib/

3. binutil を コンパイルする (cross compile platform 作成)

mkdir /var/tmp/mingw/util
cd /var/tmp/util
tar -xvzf binutils-2.11.90-20010705-src.tar.gz
mkdir mingw32
cd mingw32
../configure --prefix=/usr/local/mingw32 --target=i386-mingw32
make 

ここで、
make[3]: 入ります ディレクトリ `/var/tmp/mingw/util/mingw32/binutils/doc'
sed -e 's/@PROGRAM@/c++filt/' \
    -e 's/cxxfilt/c++filt/' < cxxfilt.man \
        > c++filt.1
/bin/sh: cxxfilt.man: そのようなファイルやディレクトリはありません
make[3]: *** [c++filt.1] エラー 1
make[3]: 出ます ディレクトリ `/var/tmp/mingw/util/mingw32/binutils/doc'
make[2]: *** [all-recursive] エラー 1
make[2]: 出ます ディレクトリ `/var/tmp/mingw/util/mingw32/binutils'
make[1]: *** [all-recursive-am] エラー 2
make[1]: 出ます ディレクトリ `/var/tmp/mingw/util/mingw32/binutils'
make: *** [all-binutils] エラー 2
という エラーになるので、

cd binutils/doc 
cp ../../../binutils/doc/cxxfilt.man .
cd ../.. 

として、もう一度 
make

make install
 
4. mingw 用の gcc を コンパイルする
注) 先に binutil いれた部分に path を 通すことを 忘れないでねっ
path=(/usr/local/mingw32/bin $path)

mkdir /var/tmp/gcc-mingw32
cd /var/tmp/gcc-mingw32
tar -xvzf ~/gcc-2.95.3-20010723-src.tar.gz
mkdir mingw32
cd mingw32
../configure --prefix=/usr/local/mingw32 --target=i386-mingw32
make cross

---

dummy.c:1: sys/types.h: ??????????????????????
dummy.c:8: stdio.h: ??????????????????????
dummy.c:9: time.h: ??????????????????????
dummy.c:10: signal.h: ??????????????????????
In file included from /var/tmp/gcc-mingw32/mingw32/gcc/include/syslimits.h:7,
                 from /var/tmp/gcc-mingw32/mingw32/gcc/include/limits.h:11,
                 from dummy.c:12:
/var/tmp/gcc-mingw32/mingw32/gcc/include/limits.h:117: No include path in which to find limits.h
gen-params: could not invoke /var/tmp/gcc-mingw32/mingw32/gcc/xgcc -B/var/tmp/gcc-mingw32/mingw32/gcc/ -B/usr/local/mingw32/i386-mingw32/bin/ -I. -I../../../libio -E on dummy.c
make[2]: *** [_G_config.h] エラー 1
make[2]: 出ます ディレクトリ `/var/tmp/gcc-mingw32/mingw32/i386-mingw32/libio'
make[1]: *** [all-target-libio] エラー 2
make[1]: 出ます ディレクトリ `/var/tmp/gcc-mingw32/mingw32'
make: *** [cross] エラー 2

----

というふうに エラーが出るので、

/var/tmp/gcc-mingw32/mingw32/gcc/include/limits.h
の 177行名
#include_next <limits.h>
を コメントアウト

そして、make して

次のエラーは、もう チェック用なので 無視して 強引に インストール。
make install を する

次に
--
  for FILE in *.h; do if [ $FILE != _G_config.h ]; then \
    rm -f /usr/local/mingw32/include/g++-3/$FILE ; \
    /bin/sh /var/tmp/gcc-mingw32/install-sh -c -m 644 $FILE /usr/local/mingw32/include/g++-3/$FILE ; \
    chmod a-x /usr/local/mingw32/include/g++-3/$FILE ; \
  else true; fi; done ; \
else true; \
fi
install:  _G_config.h does not exist
make[1]: *** [install] エラー 1
make[1]: 出ます ディレクトリ `/var/tmp/gcc-mingw32/mingw32/i386-mingw32/libio'
make: *** [install-target-libio] エラー 2

という エラーが出るので

cd /var/tmp/gcc-mingw32/mingw32/i386-mingw32/libio
して、
make 

次に 元に戻って
cd /var/tmp/gcc-mingw32/mingw32
して make install する

強引に出来上がり

5. library を 一部 必要な ライブラリーをインストールする
cd /var/tmp/mingw/win32api/w32api-1.0-20010606/lib

foreach i (*.def)
>i386-mingw32-dlltool --as "i386-mingw32-as" --def $i --dllname ${i%def} --output-lib lib${i%def}a
>end

cp *.a /usr/local/mingw32/lib

6 strip して バイナリーの大きさを 小さくする
cd /usr/local/mingw32/bin
strip *

foreach i (i386-mingw32-*)
foreach> ln -s $i ${i#i386-mingw32-}
foreach> end

cd ../i386-mingw32/bin
strip *

できあがり。

あと windows の プログラムを作成するときは /usr/local/mingw32/bin
に パスを通すのを 忘れないようにしてください。



もどる