gcc は,コンパイラの集まりで,とても優れたソフトウエア. Cygwin のパッケージを使って,gcc バージョン 4.3.2 は簡単にインストールできます(2009/05時点). 一方で,自前でビルドしたいことがあるかも知れません. この Web ページでは,Cygwin に gcc バージョン 4.3 を自前でビルド,インストールし,C, C++, Java, FORTRAN コンパイラとして機能させる手順を説明します.
※ お断り.gcc を自前でビルドしてインストールすると,不具合が出ることが多いです.不具合の解消にはとても手間がかかるでしょう.不具合が解消できない場合もあります(gcc のアンインストールは簡単ではありません).
Cygwinのセットアッププログラム setup.exe を使って, gcc バージョン 4.3 のビルドに必要となる他のソフトウエアをインストールします.簡単にインストールできます.
下記のパッケージを選ぶ.
「keep」になっている場合には,インストール済みなので,keep のままでよい.
※ 参考 Web ページ: http://gcc.gnu.org/install/prerequisites.html
ここで行うことは,日本国内の Cygwin 配布サイトから, Cygwin の gcc バージョン 4 ソースコードパッケージファイルをダウンロードすること.
ダウンロードが始まる.
mv gcc4-4.3.2-2-src.tar.bz2 /tmp
cd /tmp tar -xvjof gcc4-4.3.2-2-src.tar.bz2
gcc, g++ 等では,バージョン 4.3 ではなく,Cygwin のパッケージのものが使用されるようにする.
インストールの手順
2回実行しても良い。なぜ2回実行するのか?
※ gcc の configure については,http://gcc.gnu.org/install/configure.htmlなどの情報源があります.
※ 「patch が無いよ」というエラーが出たら,Cygwin のセットアッププログラム setup.exe を実行して,「Devel/patchutils」をインストールする.
※ binutils のビルドにおいて「undefined reference to `def_get_module'」というようなエラーが出ることがあります.これは bison がインストールされていないのが原因のエラーです.Cygwin のパッケージを使って,簡単にインストールできます.
-------------ここから-----------
TMP=/tmp
#
# 必要なファイルのチェック
#
if [ ! -f ${TMP}/gcc4-4.3.2-2.src.patch ]; then
echo ${TMP}/gcc4-4.3.2-2.src.patch is necessary
exit
fi
if [ ! -f ${TMP}/gcc4-4.3.2-2.cygwin.patch ]; then
echo ${TMP}/gcc4-4.3.2-2.cygwin.patch is necessary
exit
fi
#
# 環境変数の設定
# ※ すでに gcc-4, g++-4, gfortran-4 をインストール済みならば,そちらを使う
if [ -x /usr/local/bin/gcc-4.exe ]; then
export CC=/usr/local/bin/gcc-4
fi
if [ -x /usr/local/bin/g++-4.exe ]; then
export CXX=/usr/local/bin/g++-4
fi
if [ -x /usr/local/bin/gfortran-4.exe ]; then
export F77=/usr/local/bin/gfortran-4
fi
echo CC = ${CC}
echo CXX = ${CXX}
echo F77 = ${F77}
echo Please press ENTER
read
#
# ファイルのダウンロード
#
# Cygwin パッケージからインストールした gcc, g++ バージョン 4 を使う設定
cd ${TMP}
wget http://133.5.18.167/computer/src/gnu/make-3.81.tar.gz
wget http://133.5.18.167/computer/src/gnu/termcap-1.3.1.tar.gz
wget http://133.5.18.167/computer/src/gnu/libtool-2.2.6a.tar.gz
wget http://133.5.18.167/computer/src/gnu/gmp-4.2.4.tar.bz2
wget http://133.5.18.167/computer/src/gnu/mpfr-2.4.1.tar.bz2
wget http://133.5.18.167/computer/src/gnu/libiconv-1.13.tar.gz
wget http://133.5.18.167/computer/src/gnu/gdb-6.6.tar.bz2
wget http://133.5.18.167/computer/src/gnu/binutils-2.19.1.tar.bz2
wget http://133.5.18.167/computer/src/gnu/gcc-4.3.3.tar.bz2
echo Please press ENTER
read
#
# ビルド
#
cd ${TMP}
rm -rf make-3.81
tar -xvzof make-3.81.tar.gz
cd make-3.81
./configure --prefix=/usr/local
echo Please press ENTER
read
make
echo Please press ENTER
read
make install
echo Please press ENTER
read
cd ${TMP}
rm -rf termcap-1.3.1
tar -xvzof termcap-1.3.1.tar.gz
cd termcap-1.3.1
./configure --prefix=/usr/local
echo Please press ENTER
read
make
echo Please press ENTER
read
make install
echo Please press ENTER
read
cd ${TMP}
rm -rf libtool-2.2.6a
tar -xvzof libtool-2.2.6a.tar.gz
cd libtool-2.2.6
./configure --prefix=/usr/local
echo Please press ENTER
read
make
echo Please press ENTER
read
make install
echo Please press ENTER
read
#
# static library
#
cd ${TMP}
rm -rf gmp-4.2.4
tar -xvjof gmp-4.2.4.tar.bz2
cd gmp-4.2.4
# 「CPPFLAGS="-fexceptions" 」が必要
LDFLAGS="-Xlinker --enable-auto-import" CPPFLAGS="-fexceptions" ./configure --enable-cxx --prefix=/usr/local --enable-static
echo Please press ENTER
read
make
echo Please press ENTER
read
make check
echo Please press ENTER
read
make install
echo Please press ENTER
read
cd ${TMP}
rm -rf mpfr-2.4.1
tar -xvjof mpfr-2.4.1.tar.bz2
cd mpfr-2.4.1
./configure --prefix=/usr/local --with-gmp=/usr/local --enable-static --disable-shared
echo Please press ENTER
read
make
echo Please press ENTER
read
make check
echo Please press ENTER
read
make install
echo Please press ENTER
read
cd ${TMP}
rm -rf gdb-6.6
tar -xvjof gdb-6.6.tar.bz2
cd gdb-6.6
./configure --prefix=/usr/local --with-mpfr=/usr/local --with-gmp=/usr/local
echo Please press ENTER
read
make
echo Please press ENTER
read
make install
echo Please press ENTER
read
cd ${TMP}
rm -rf libiconv-1.13
tar -xvzof libiconv-1.13.tar.gz
cd libiconv-1.13
./configure --prefix=/usr/local --with-mpfr=/usr/local --with-gmp=/usr/local --enable-static --enable-shared
echo Please press ENTER
read
make
echo Please press ENTER
read
if [ -f /usr/local/bin/cygiconv-2.dll ]; then
echo skip
else
rm -f /usr/local/bin/cygiconv-2.dll.OLD
mv /usr/local/bin/cygiconv-2.dll /usr/local/bin/cygiconv-2.dll.OLD
fi
make -k install
echo Please press ENTER
read
if [ -f /usr/lib/libiconv.la ]; then
echo skip
else
cp /usr/local/lib/libiconv.la /usr/lib/libiconv.la
fi
cd ${TMP}
rm -rf binutils-2.19.1
tar -xvjof binutils-2.19.1.tar.bz2
cd binutils-2.19.1
./configure --prefix=/usr/local --mandir=/usr/local/share/man --infodir=/usr/local/share/info \
--with-mpfr=/usr/local --with-gmp=/usr/local \
--enable-version-specific-runtime-libs --enable-static --enable-shared --enable-shared-libgcc --enable-__cxa_atexit \
--with-gnu-ld --with-gnu-as --with-dwarf2 --disable-sjlj-exceptions \
--enable-libssp --enable-threads=posix --enable-checking=release
echo Please press ENTER
read
make
echo Please press ENTER
read
make install
echo Please press ENTER
read
#
# /usr/local/bin/*.dll のコピー
#
cp /usr/local/bin/*.dll /cygdrive/c/WINDOWS/system32
#
# gcc
#
cd ${TMP}
# # gcc-4.3.3 の場合
rm -rf gcc-4.3.2 gcc-4.3.3
tar -xvjof gcc-4.3.3.tar.bz2
ln -s gcc-4.3.3 gcc-4.3.2
patch -p1 < gcc4-4.3.2-2.src.patch
patch -p1 < gcc4-4.3.2-2.cygwin.patch
cd gcc-4.3.3
# # gcc-4.3.4 の場合
# rm -rf gcc-4.3.2 gcc-4.3.3 gcc-4.3-20090621
# tar -xvjof gcc-core-4.3-20090621.tar.bz2
# tar -xvjof gcc-fortran-4.3-20090621.tar.bz2
# tar -xvjof gcc-g++-4.3-20090621.tar.bz2
# tar -xvjof gcc-java-4.3-20090621.tar.bz2
# ln -s gcc-4.3-20090621 gcc-4.3.2
# patch -p1 < gcc4-4.3.2-2.src.patch
# patch -p1 < gcc4-4.3.2-2.cygwin.patch
# cd gcc-4.3-20090621
./configure --prefix=/usr/local --exec-prefix=/usr/local --bindir=/usr/local/bin --sbindir=/usr/local/sbin --libexecdir=/usr/local/sbin --datadir=/usr/local/share --infodir=/usr/local/share/info --mandir=/usr/local/share/man \
--with-gmp=/usr/local --with-mpfr=/usr/local \
--enable-bootstrap --enable-version-specific-runtime-libs --enable-static --enable-shared --enable-shared-libgcc --enable-__cxa_atexit \
--with-gnu-ld --with-gnu-as --with-dwarf2 --disable-sjlj-exceptions \
--enable-languages=c,c++,fortran,java --disable-symvers \
--enable-libjava --enable-libssp --enable-threads=posix \
--program-suffix=-4
echo Please press ENTER
read
# -march=core2 は CPU の種類にあわせて変える.良く分からない場合は取り除く.
make CFLAGS="-O2 -march=core2" LIBCFLAGS="-g -O2 -march=core2" LIBCXXFLAGS="-g -O2 -march=core2" bootstrap
# Cygwin の patch の 1つを強引に戻す
cat i686-pc-cygwin/libstdc++-v3/src/Makefile | fgrep -v exclude-modules-for-implib > /tmp/hoge.$$
cp /tmp/hoge.$$ i686-pc-cygwin/libstdc++-v3/src/Makefile
make CFLAGS="-O2 -march=core2" LIBCFLAGS="-g -O2 -march=core2" LIBCXXFLAGS="-g -O2 -march=core2" bootstrap
echo Please press ENTER
read
make CFLAGS="-O2 -march=core2" LIBCFLAGS="-g -O2 -march=core2" LIBCXXFLAGS="-g -O2 -march=core2" install
echo Please press ENTER
read
#
# /usr/local/bin/*.dll のコピー
#
cp /usr/local/bin/*.dll /cygdrive/c/WINDOWS/system32
#
# 環境変数の解除
#
unset CC
unset CXX
unset F77
echo done
--------------ここまで---------