第6回 GCCのインストールとC言語におけるGCCの拡張機能

岸 哲夫

 今回は,GCCを各種環境にインストールする際の注意点を解説し,続けてGCCで拡張されているC言語の仕様について,今回と次回の2回に分けて説明する.具体的には,今回は,
・式の中の文と宣言  ・ローカルに宣言されたラベル  ・値としてのラベル 
・入れ子になった関数  ・関数呼び出しの構築  ・型の代入 
・typeofでの型の参照  ・拡張されたlvalue
について,解説を行う. (編集部)

space
GCCの導入に際して

 現在,インテルアーキテクチャで動作するLinuxマシンにGCCを導入することは簡単です.実際,インストールのためのパッケージやバイナリが数多く配布されています.それらを利用することで,とくに悩む必要はなくなりました.

 それでも通常のインストールが必要な環境の場合もあるので,詳細を説明をします.

MS-DOSの場合

 本連載では,基本的にLinuxで動作するGNUツールを扱っていく予定ですが,他の環境で動作するGCCについて少し説明しておきます.

 「素の」MS-DOSはあまり使われなくなってきていると思いますが,組み込み用途などではまだ活躍しています.この環境でGCCを動作させるなら,DJGPPというツールをインストールしなくてはなりません.このセットには,DOS-Extenderツールが含まれているので,32ビット処理が可能になります.

 公式サイトを図1に示します.

〔図1〕djgppのWebページ
http://www.delorie.com/djgpp/

 また,特殊な用途になりますが,「8086」プロセッサ環境の16ビットMS-DOSにもインストール可能です.図2に示すWebページからダウンロードできます.

〔図2〕gcc for 8086
http://www.delorie.com/djgpp/16bit/gcc/

 もちろん,LinuxなどのGCCとそのまま同じではなく,以下のような制約があります.

・farポインタが使用できない
・doubleおよびfloatが使用できない
・コードが64Kバイト,データが64Kバイト以上使用できない
・C++のconstructorsとdestructorsが使用できない
・デバッグツールがない
・ライブラリがない.また,スタートアップコードも標準のヘッダもない

 この場合,リンカもDJLINKというツールを使います.

BeOSの場合

 インストールした時点でGCCが導入されているはずです.バージョンを上げる場合には,元のGCCでコンパイルが可能です.

Mac OS Xの場合

 やはり最初からGCCが導入されています.CCという名前で/usr/bin/ccにあります.

VMSシステム

 GCCのVMSバージョンは,バックアップ・セーブセットとして配布されています.ソースコードとコンパイル済みのバイナリが含まれています.

 しかし,まだ多くのバグがあるようです.それを回避する策の一つは,導入した環境でバイナリを再作成することです.

Sunにインストールする場合の注意

 Solarisでは, GCCをビルドする際,/usr/ucbにあるリンカやその他のツールを使わず,/usr/ccs/binのほうにあるツールを使ってください.ビルド中にアセンブラでエラーを発生する場合があります.

 その場合,最新のGNUアセンブラを使用してください.binutilsの最新版にアップグレードするか,またはSolarisのアセンブラを使ってください.

 libgcc.aをコンパイルするときには,環境変数FLOAT_OPTIONがセットされていないことを確認してください.libgcc.aのコンパイル時にこのオプションがf68881にセットされていると,生成されるコードは特殊なスタートアップファイルとリンクすることを要求され,正しくリンクできなくなります.

 また,Sunのライブラリのバージョンによっては,allocaにバグがあります.このバグを回避するには,GCCによってコンパイルされたGCCバイナリをインストールしてください.これは,allocaを組み込み関数として使います.ライブラリの中の関数を使うことはありません.

 Sunのコンパイラのバージョンによっては,GCCをコンパイルする際にクラッシュします.問題になるのは,cppにおけるセグメンテーションフォルトです.この問題の原因は,環境変数に大量のデータが存在することにあるように思われます.SunのCCを使ってGCCをコンパイルするのに以下のコマンドを使うことによって,この問題を回避することができるかもしれません.

  make CC="TERMCAP=x OBJS=x LIBFUNCS=x STAGESTUFF=x cc"

 SunOS 4.1.3と4.1.3_U1にはバグがあるようで,GCCをコンパイルする際に問題が起きます.その場合,最新のOSにアップグレードしてください.

 ざっと説明しましたが,このようにMS-DOSでもMac OS XでもGCCを使用することは可能です.また,VMS環境でも,もちろん商用UNIX環境にも導入が可能です.場合によっては,そのマシンで使用されるオリジナルな環境よりも効率が良いかもしれません.


NEW記事内インデックス    連載インデックスはこちら   Interfaceのトップ
◆GCCの導入に際して
◆C言語におけるGCCの拡張機能
 式の中の文と宣言
 ローカルに宣言されたラベル/値としてのラベル/入れ子になった関数/
  関数呼び出しを構築する /型の代入
 typeofで型を参照する/拡張されたlvalue

Copyright 2003 岸 哲夫

Copyright 1997-2017 CQ Publishing Co.,Ltd.