第12回 続・GCC2.95から追加変更の あったオプションの補足と検証

岸 哲夫

 今回は前回(2003年8月号)に引き続き,GCC2.95から追加変更のあったオプションの補足と検証を行う.その前に,蛇足かもしれないがGCC3.3を導入する方法について解説する. (筆者)

space

GCC3.3をインストールする方法

 筆者の環境は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

C言語の方言を扱うオプション の補足

 前回で書ききれなかった,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にまとめます.

〔表1〕C言語の方言を扱うオプション

LINK関連のオプションの補足

 新しいオプション-l libraryは-llibraryと同義です.

-nodefaultlibs

 このオプションを指定すると,リンク時に標準のシステムライブラリを使用しません.

-shared-libgcc

 共有ライブラリとしてlibgccを供給するシステムにおいて,このオプションは,共有されたライブラリの使用を強制します.

 もっともコンパイラを構築したときに,libgccの共有されたバージョンが造られなかったなら,このオプションは,効果を持ちません.

-static-libgcc

 このオプションは上と逆に静的ライブラリとしてリンクすることを強制します.

〔表2〕LINK関連のオプション

 以上を表2にまとめます.


NEW記事内インデックス    連載インデックスはこちら   Interfaceのトップ
◆GCC3.3をインストールする方法/C言語の方言を扱うオプション の補足/LINK関連のオプションの補足
プリプロセッサ関連のオプションの補足
警告を要求/抑止する オプションの補足

Copyright 2003 岸 哲夫

Copyright 1997-2017 CQ Publishing Co.,Ltd.