筆者の環境はRed Hat Linux 8.0でした.その場合,glibcのバージョンを上げないと不具合が生じるとの情報がGNUのサイトにあったので,Red Hat Linux 9.0に変更しました.「Build status for GCC 3.3」には他のディストリビューションの情報もあるので,参考になるでしょう.URLは以下のとおりです.
http://gcc.gnu.org/gcc-3.3/buildstat.html
では,具体的なインストール方法を解説します.
1)http://www.dnsbalance.ring.gr.jp/のRingServerなどで最新版のソースをダウンロードします.
2)bzcat gcc-3.3.tar.bz2 | tar xvf-
上記のコマンドで展開を行います.
3)cd gcc-3.3で移動.
4)以下のようにconfigureを行います.
--prefix=/usr/local/gccbinutils
--enable-__cxa_atexit --enable-shared
--enable-threads=posix
これは,環境や用途にも依存します.
筆者はGCC3.2.2も比較のため残しておきたかったので,/usr/local/gccbinutils/bin/gccにバイナリを作成することにします.
5)以下のようにmakeコマンドを入力します.
make CFLAGS='-O2' LIBCFLAGS='-g-O2'
LIBCXXFLAGS='-g-O2-fno-implicit
-templates' bootstrap
同じく環境や用途に依存しますが,Pentium?,800MHzのマシンで2時間少しコンパイル時間がかかります.
6)make installでインストールします.
7)mv /usr/bin/gcc /usr/bin/gcc322
ln -s /usr/local/gcc binutils/bin/gcc/usr/bin/gcc
これで旧版gccをgcc322に変更し,新版(3.3)gccをgccと打鍵して使えるようにしました.
8)gcc -vで以下のようになるはずです.
もちろんCPUなどの環境によって少し違うはずです.
$gcc -v
/usr/local/gccbinutils/lib/gcc-lib/i686-pc-
linux-gnu/3.3/specsからspecを読み込み中
コンフィグオプション: ./configure --prefix=/usr/
local/gcc binutils --enable-__cxa_atexit
--enable-shared --enable-threads=posix
スレッドモデル : posix
gccバージョン3.3
前回で書ききれなかった,GCC2.95から追加変更のあったオプションの補足と検証を行います.
● -ffreestanding
このオプションは組み込み環境や,カーネルをコンパイルする際に使用します.標準ライブラリが存在しない環境や,プログラムのスタートが__mainではない環境において使用します.
これを指定すると同時に-fno-builtinオプションを指定したことになります.連載第3回で-fno-builtinオプションの解説をしましたが,GCC3.3になって,その意味が変わっています.これも後述します.
● -fms-extensions
マイクロソフト製のヘッダファイル中にある非標準的記述を受け入れます.これはCygwin環境で使用する際に,VC++などで作った環境を移植する際に使用します.
● -ansi
前回の連載の補足です.GCC2.95では-ansiオプションを使用した場合,関数alloca/abort/exit/_exitは組み込み関数として扱われません.
GCC3.3で-ansiオプションを使用した場合,ANSI標準でないallocaのような関数は組み込み関数として扱われません.組み込み関数については別に項を設け,そこで詳しく解説します.
● -fno-asm
従来はキーワードinlineはANSI標準キーワードでなかったのですが,ANSI C99規格からは標準となりました.よってこのオプションを指定すると,asm,typeofをキーワードとして認識しないようになります.これらの名前は識別子として使用可能になり,代わりに__asm__,__typeof__がキーワードとして使えるようになります.
● -fallow-single-precision
連載第3回で解説したオプションですが,GCC3.3では廃止されました.
以上のC言語の方言を扱うオプションを表1にまとめます.
新しいオプション-l libraryは-llibraryと同義です.
● -nodefaultlibs
このオプションを指定すると,リンク時に標準のシステムライブラリを使用しません.
● -shared-libgcc
共有ライブラリとしてlibgccを供給するシステムにおいて,このオプションは,共有されたライブラリの使用を強制します.
もっともコンパイラを構築したときに,libgccの共有されたバージョンが造られなかったなら,このオプションは,効果を持ちません.
● -static-libgcc
このオプションは上と逆に静的ライブラリとしてリンクすることを強制します.