トップページ -> 情報工学,情報スキルの教材 -> Windows の C/C++ プログラミング用ツールとライブラ -> gcc バージョン 4.3 のビルドとインストール(Cygwin の場合)
[サイトマップへ]  

gcc バージョン 4.3 のビルドとインストール(Cygwin の場合)

gcc は,コンパイラの集まりで,とても優れたソフトウエア. Cygwin のパッケージを使って,gcc バージョン 4.3.2 は簡単にインストールできます(2009/05時点). 一方で,自前でビルドしたいことがあるかも知れません. この Web ページでは,Cygwingcc バージョン 4.3 を自前でビルド,インストールし,C, C++, Java, FORTRAN コンパイラとして機能させる手順を説明します.

※ お断り.gcc を自前でビルドしてインストールすると,不具合が出ることが多いです.不具合の解消にはとても手間がかかるでしょう.不具合が解消できない場合もあります(gcc のアンインストールは簡単ではありません).


前準備

前もってインストールしておくべきソフトウエア

前もって決めておく事項


gcc バージョン 4.3 のビルドに必要なソフトウエア等を Cygwin のパッケージを使ってインストール

Cygwinのセットアッププログラム setup.exe を使って, gcc バージョン 4.3 のビルドに必要となる他のソフトウエアをインストールします.簡単にインストールできます.

  1. セットアッププログラムの開始

  2. パッケージ選択画面 (Select Packages)」(下図)まで進む

  3. パッケージ選択画面で,パッケージを選ぶ

    下記のパッケージを選ぶ.

    「keep」になっている場合には,インストール済みなので,keep のままでよい.

    ※ 参考 Web ページ: http://gcc.gnu.org/install/prerequisites.html

  4. 終了の確認


Cygwin の gcc バージョン 4 ソースコードパッケージファイルのダウンロード

ここで行うことは,日本国内の Cygwin 配布サイトから, Cygwin の gcc バージョン 4 ソースコードパッケージファイルをダウンロードすること.

  1. http://ftp.jaist.ac.jp/pub/cygwin/release/gcc4/ を開く

  2. 「gcc4-4.3.2-2-src.tar.bz2」をクリック

    ダウンロードが始まる.

  3. 以下の作業は,Cygwin のコンソールで行う

  4. ダウンロードしたファイルは,作業用ディレクトリである /tmp に移動
    mv gcc4-4.3.2-2-src.tar.bz2 /tmp
    

  5. 解凍
    cd /tmp
    tar -xvjof gcc4-4.3.2-2-src.tar.bz2
    

gcc バージョン 4.3 のビルドとインストール

インストールの方針

gcc バージョン 4.3 のビルドとインストール

インストールの手順

  1. 下記のコマンドを,1つのファイルに保存 (ファイル名は、例えば hoge.sh)

  2. 下記のコマンド内で,-march=core2は CPU の種類にあわせて変える.良く分からない場合は取り除く.

  3. 「sh hoge.sh」のようにして実行

    2回実行しても良い。なぜ2回実行するのか?

    1. 最初は, make, termcap, libtool, gmp, mpfr, gdb, libiconv, binutils, GNU コンパイラ・バージョン4.3 を, Cygwin のパッケージでインストールされた gcc/g++ バージョン 3.4.3 を使ってビルドし,インストール
    2. 次は, make, termcap, libtool, gmp, mpfr, gdb, libiconv, binutils, GNU コンパイラ・バージョン4.3 を, 今インストールされた gcc/g++ バージョン 4.3 を使ってビルドし,再度インストール。そうしたいときは、2回実行する。

  4. シェルスクリプトを実行すると,途中で、何度か「Please press ENTER」と表示して止まる.エラーが出ていないことを確認の上、Enter キーを押す. エラーが出ている場合には、原因を調べて対処.

  5. ソースコードのバージョンは,2009/05 時点の最新版ですが、より新しいものを使いたい場合には、ソースコードを入手し、下記を書き換えた後に実行.

  6. コマンドを、1つのファイルに保存せずに、手打ちで行う場合には「echo Please press ENTER」と「read」は打たなくてよい.

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

--------------ここまで---------