実行に影響を与える環境変数

 ここでは,GCCの実行時に影響を及ぼす環境変数について記します.

 ファイルを探索する際に利用されるディレクトリ,または接頭語を指定することによって作用を及ぼします.また,環境変数はコンパイル環境の他の側面を指定するためにも使われます.探索される場所については,-B,-I,-Lのようなオプションを使うことによっても指定可能であることに注意してください(第4回で説明した「ディレクトリ探索のためのオプション」を参照).

 もちろん,コマンドラインオプションによる指定は,環境変数による指定よりも優先されます.一方,環境変数による指定は,GCCのコンフィグレーションにおける指定よりも優先されます.

● LANG
● LC_CTYPE
● LC_MESSAGES
● LC_ALL

 以上の環境変数は,異なる国の慣習をサポートできるようにGCCがローカライズ情報を使う方法をコントロールします.

 GCCは,configureによってそのようにするように構成されている場合には,ロケールカテゴリLC_CTYPE,LC_MESSAGESを調べます.これらのロケールカテゴリには,インストール環境によりサポートされている任意の値をセットすることができます.

 日本語のEUC漢字コードを使う環境ならば,LANGはja_JP.eucJPと,シフトJISならばja_JP.SJISとなっています.

 環境変数LC_CTYPEは,文字分類を指定します.

 環境変数LC_MESSAGESは,診断メッセージにおいて使用する言語を指定します.

 環境変数LC_ALLがセットされると,その値によってLC_CTYPEやLC_MESSAGESの元の設定は無効にされます.環境変数LC_ALLがセットされていない場合は,LC_CTYPEとLC_MESSAGESのデフォルトの値は環境変数LANGの値となります.

 これらの変数がいずれもセットされていない場合,GCCのデフォルトは英語環境となります.

 環境変数だけ設定しても診断メッセージが日本語で出力されるわけではありません.それなりの環境構築が必要となります.

 なお「Linuxにおける日本語ロケールに関する指針」という文書があります.どのような機能を提供すべきかの指針や,どのように実装すべきかの指針を提言しています.

・「Linuxにおける日本語ロケールに関する指針」のWebページ

 http://www.linux.or.jp/JF/JFdocs/ Japanese-Locale-Policy/index.html

TMPDIR

 一時ファイルを作成するのに使われるディレクトリを指定する際に使用します.

 コンパイルの過程は,四つの段階に分けることができます.プリプロセス/コンパイル/アセンブル/リンクです.

 GCCは,それぞれの段階の中間出力を保存するために一時ファイルを作成し,それが次の段階の入力として使われます.たとえば,コンパイルの出力はアセンブラソースです.オプション指定でアセンブラソースを意図的に作成しないかぎり,中間出力として一時ファイルに保存され,次の段階の入力として使われます.

GCC_EXEC_PREFIX

 GCC_EXEC_PREFIXがセットされていると,それはコンパイラにより実行される下位プログラムの名前の接頭語となります.

 GCC_EXEC_PREFIXのデフォルトの値はprefix/lib/gcc-lib/です.prefixは,configureスクリプトを実行したときのprefixの値です.クロスコンパイル環境を構築した際にprefixの値は変わりますが,通常は/usrです.もちろん-Bオプションで指定された別の接頭語があれば,そちらが優先されます.

 デフォルトの/usr/lib/gcc-lib/の下にはスタートアップルーチンや共用ライブラリなどがあります.

 通常はありえませんが,クロスコンパイル環境においてスタートアップルーチンがリンクエラーになった場合,この環境変数が正しいかチェックしましょう.

COMPILER_PATH

 COMPILER_PATHの値は,PATHと同じくコロンで区切られたディレクトリのリストです.上で説明したGCC_EXEC_PREFIXを使ってcc1コマンドなどを見つけることができない場合,この環境変数で指定されたディレクトリを探索します.

LIBRARY_PATH

 LIBRARY_PATHの値は,PATHと同じくコロンで区切られたディレクトリのリストです.GCCがconfigureによってネイティブコンパイラとして構成された場合,GCC実行時に,GCC_EXEC_PREFIXを使って特殊なリンカファイルを見つけることができないと,この環境変数で指定されたディレクトリを探索します.

 GCC実行時のリンク処理では,-lオプションで指定された通常のライブラリを探す際にも,このディレクトリが使われます.

 もちろん,明示的にライブラリ探索用と宣言されたディレクトリである-Lオプションで指定されたものが最初に使われます.

● C_INCLUDE_PATH
● CPLUS_INCLUDE_PATH
● OBJC_INCLUDE_PATH

 上の環境変数は特定の言語に関係するものです.個々の変数の値は,PATHと同じくコロンで区切られたディレクトリのリストです.GCC実行時にヘッダファイルを探す際には,まずオプション-Iで指定されたディレクトリが探索され,続いて上の環境変数のうち使用している言語に対応するものに設定されているディレクトリが探索されます.

 標準のヘッダファイルディレクトリは,このあとに探索されます.

 C_INCLUDE_PATHはC言語,CPLUS_INCLUDE_PATHはC++言,OBJC_INCLUDE_PATHはOBJECTIVE C言語にそれぞれ対応します.

DEPENDENCIES_OUTPUT

 この変数がセットされていると,その値はコンパイラにより処理されるヘッダファイルに基づいてmake用の依存関係をどのように出力するかを指定します.この出力は,-Mオプションによる出力とよく似ていますが,ここでは別ファイルに書き込まれ,通常のコンパイル処理も行われます.

 実際に指定してみましょう.次に示すようになります.

  $ export DEPENDENCIES_OUTPUT=$HOME/Out.dat
  $ gcc -M test39.c
  test39.o: test39.c /usr/include/time.h \
   /usr/include/features.h \
   /usr/include/sys/cdefs.h \
   /usr/include/gnu/stubs.h \
   /usr/lib/gcc-lib/i586-pc-linux/2.95.3/include/stddef.h\
   /usr/include/bits/time.h \
   /usr/include/bits/types.h \
   /usr/include/bits/pthreadtypes.h \
   /usr/include/bits/sched.h \
   /usr/include/sys/time.h \
   /usr/include/sys/select.h \
   /usr/include/bits/select.h \
   /usr/include/bits/sigset.h \
   /usr/include/stdio.h \
   /usr/include/libio.h \
   /usr/include/_G_config.h \
   /usr/include/wchar.h \
   /usr/include/bits/wchar.h \
   /usr/include/gconv.h \
   /usr/lib/gcc-lib/i586-pc-linux/2.95.3/include/stdarg.h\
   /usr/include/bits/stdio_lim.h
  $ gcc test39.c
  $ cat Out.dat
  test39.o: test39.c
  $

LANG

 この環境変数は,GCCの実行時にロケール情報を渡すために使われます.この情報の用途の一つに文字セットの決定があります.C/C++において文字リテラル,文字列リテラル,コメントが解析される際に使われます.

 GCCが構築時にconfigureによってマルチバイト文字を取り扱えるよう構成されている場合,LANGの値として以下のものが認識されます.

・C-JIS
 JIS文字を認識します.

・C-SJIS
 シフトJIS文字を認識します.

・C-EUCJP
 EUC文字を認識します.

 LANGが定義されていない場合や,値が不正な場合には,マルチバイト文字の認識と変換を行うために,デフォルトのロケールにより定義されているmblenとmbtowcを使うことになります.

NEW記事内インデックス    連載インデックスはこちら   Interfaceのトップ
クロスコンパイル環境について
コード生成規約に対するオプション
◆実行に影響を与える環境変数
プログラムにプロトタイプを追加するprotoizeについて, またプロトタイプを削除するunprotoizeについて

Copyright 2003 岸 哲夫

Copyright 1997-2017 CQ Publishing Co.,Ltd.