GCC使用

7112 ワード

GCCのオプション
GCCのデフォルトヘッダファイルパスの指定方法
Linuxシステムのヘッダファイルとライブラリファイルの検索パス
ヘッダファイル
ライブラリファイル
実行時のダイナミックライブラリの検索パス
GCCのオプション
-c
ターゲットファイル(.o)のみが生成され、接続されません.
% gcc -c main.c
% g++ -c reciprocal.cpp

-I
ヘッダファイルのディレクトリを指定できます
% g++ -c -I ../include reciprocal.cpp

-D
マクロ定義の設定
% g++ -c -D NDEBUG reciprocal.cpp
% g++ -c -D NDEBUG=3 reciprocal.cpp

-O
最適化レベル、デフォルトの最適化レベルは2
% g++ -c -O2 reciprocal.cpp

-o
接続プログラム、実行可能な生成
GCCのデフォルトヘッダファイルパスの指定方法
GCCコンパイラに影響を与えるように設定できる環境変数は多数あります.これらの変数の制御には、適切なコマンドラインオプションも使用できます.一部の環境変数はディレクトリ名リストに設定されます.これらの名前はPATH環境変数と同じ形式で使用されます.特殊文字PATH_SEPARATOR(コンパイラをインストールするときに定義)はディレクトリ名の間で使用されます.UNIXシステムでは区切り記号はコロンで、Windowsシステムではセミコロンです.
C_INCLUDE_PATH
Cプログラムのコンパイル時にこの環境変数を使用します.この環境変数は、コマンドラインで指定したように、1つ以上のディレクトリ名のリストを指定し、ヘッダファイルを検索します.
-isystemオプションは同じです.-isystemで指定したすべてのディレクトリが最初に検索されます.CPATH、CPLUSも参照INCLUDE_PATHとOBJC_INCLUDE_PATH .
COMPILER_PATH
この環境変数は、GCC_が指定されていない場合、1つ以上のディレクトリ名リストを指定します.EXEC_PREFIXはサブルーチンを位置決めし、コンパイラはここでサブルーチンを検索します.LIBRARYも参照PATH 、 GCC_EXEC_PREFIXおよび-Bコマンドラインオプション.
CPATH
C、C++およびObjective-Cプログラムをコンパイルするときに使用します.この環境変数は、コマンドラインで-lオプションを指定するように、1つ以上のディレクトリ名リストを指定し、ヘッダファイルを検索します.-lで指定したすべてのディレクトリが最初に検索されます.Cも参照INCLUDE_PATH 、 CPLUS_INCLUDE_PATHとOBJC_INCLUDE_PATH
CPLUS_INCLUDE_PATH
この環境変数は、C++プログラムのコンパイル時に使用します.この環境変数は、コマンドラインで指定したように、1つ以上のディレクトリ名のリストを指定し、ヘッダファイルを検索します.
  • isystemオプションは同じです.-isystemで指定したすべてのディレクトリが最初に検索されます.CPATH、C_も参照INCLUDE_PATHとOBJC_INCLUDE_PATH .

  • DEPENDENCIES_OUTPUT
    ファイル名に環境変数を設定すると、プリプロセッサは依存関係に基づくmakefileルールをファイルに書き込むことができます.システムヘッダファイルの名前は含まれません.環境変数が単一の名前に設定されている場合は、ファイル名とみなされ、リレーショナル・ルールに依存する名前はソース・ファイル名から来ます.定義に2つの名前がある場合、2番目の名前は依存関係ルールとして使用されるターゲット名です.環境変数の結果の設定とコマンドラインオプションの使用
  • MM、MF、およびMTの組み合わせは同じである.SUNROも参照DEPENDENCIES

  • GCC_EXEC_PREFIX
    環境変数が定義されている場合は、コンパイラが実行するすべてのサブルーチン名の接頭辞として使用されます.たとえば、asを検索するのではなくtestverに変数を設定すると、アセンブリはまず名前testverasの下で検索します.ここで見つからない場合、コンパイラは通常の名前で検索を続けます.パス名は、接頭辞名に斜線で指定できます.
    GCC_EXEC_PREFIX
    のデフォルト設定はprefix/lib/gcc-lib/で、ここでprefixはコンパイラをインストールするときにconfigureスクリプトで指定した名前です.この接頭辞は、実行可能プログラムの一部として含まれる標準接続プログラムファイルの位置決めにも使用されます.-Bコマンドラインオプションを使用すると、この設定が書き換えられます.COMPILERも参照PATH .
    LANG
    この環境変数は、コンパイラが使用する文字セットを示すために使用され、ワイド文字、シリアル文字、コメントを作成できます.定義LANGはC-JISであり、前処理プログラムがマルチバイト文字をJIS(日本語工業規格)文字に従って解釈することを指摘する.C-SJISはShift-JIS文字を指摘するのに用いられ、C-EUCJPは日本語EUCを指摘するのに用いられる.LANGが定義されていない場合、または識別不可能と定義されている場合、関数mblen()は文字幅を決定するために用いられ、mbtowc()は、マルチバイトシーケンスをワイド文字に変換するために使用されます.
    LC_ALL
    設定されている場合、環境変数の値はLC_を書き換えます.MESSAGESとLC_CTYPEのすべての設定.
    LC_CTYPE
    この環境変数は、参照列で定義されたマルチバイト文字の文字分類を示します.主に文字列の文字境界を決定するために使用され、文字符号化には引用符またはエスケープが必要であり、文字列の末尾または特殊な文字列として誤って解釈することができる.Australian Englishでは、en_に設定できます.AU ; Mexican Spanishの場合は、es_に設定できます.MX.この変数が設定されていない場合、デフォルトはLANG変数の値です.または、LANGが設定されていない場合は、C英語の動作を使用します.LCも参照ALL .
    LC_MESSAGES
    この環境変数は、コンパイラがどの言語で診断メッセージを発行するかを示します.Australian Englishの場合、en_に設定できます.AU ;MexicanSpanishの場合、es_に設定できます.MX .変数が設定されていない場合、LANG変数のデフォルト値を使用するか、LANGが設定されていない場合は、C英語の動作を使用します.LCも参照ALL .
    LD_LIBRARY_PATH
    この環境変数はコンパイラには影響しませんが、プログラムが実行されると影響します.変数はディレクトリリストを指定し、プログラムはリストを検索して共有ライブラリを検索します.コンパイラのディレクトリに共有ライブラリが見つからない場合にのみ、実行プログラムは変数を設定する必要があります.
    LD_RUN_PATH
    この環境変数はコンパイラには影響しませんが、プログラムが実行されると影響します.この変数は実行時にファイルの名前を指摘し、実行するプログラムはその記号の名前とアドレスを得ることができる.アドレスは再ロードされないため、記号は他のファイルの絶対アドレスを参照する可能性があります.これはldツールが-Rオプションを使用するのと全く同じです.
    LIBRARY_PATH
    この環境変数は、1つまたは複数のディレクトリ名リストに設定できます.接続プログラムは、そのディレクトリを検索して、特殊な接続プログラムファイルを検索し、-l(アルファベットl)コマンドラインオプションによって名前が指定されたライブラリを検索します.-Lコマンドラインオプションによって指定されたディレクトリは、環境変数の前に最初に検索されます.COMPILER_PATHも参照してください.
    OBJC_INCLUDE_PATH
    この環境変数は、Objective-Cプログラムをコンパイルするときに使用します.1つ以上のディレクトリ名のリストは、コマンドラインで-isystemオプションを指定したように、環境変数によって指定されます.-isystemオプションで指定されたすべてのディレクトリが最初に検索されます.CPATH、CPLUSも参照INCLUDE_PATHとC_INCLUDE_PATH .
    SUNPRO_OUTPUT
    ファイル名に環境変数を設定すると、プリプロセッサは依存関係に基づくmakefileルールをファイルに書き込むことができます.システムヘッダファイル名が含まれます.環境変数が単一の名前に設定されている場合は、ファイル名として扱われ、依存関係ルールの名前はソースファイルの名前から取得されます.定義に2つの名前がある場合、2番目の名前は依存関係ルールのターゲット名です.この環境変数を設定した結果は、コマンドラインでパラメータM、MF、およびMTを使用した場合と同様です.DEPENDENCIESを参照OUTPUT .
    TMPDIR
    この変数には、コンパイラが一時的な作業ファイルを格納するディレクトリのパス名が含まれます.これらのファイルは、通常、コンパイルプロセスの終了時に削除されます.このようなファイルの一例は、プリプロセッサによって出力され、コンパイラに入力されるファイルである.
    Linuxシステムのヘッダファイルとライブラリファイルの検索パス
    **#include**のヘッダファイル、データベース、システム定義を連結し、以下のソースでgccを指定して探します.
  • 当初コンパイル時に指定する(~gcc/gcc/collect 2.c:locatelib()
  • .
  • specsに書かれた(rpmパケット用)
  • 後に-D-I-Lで指定された
  • gcc環境変数設定(コンパイル時)
  • ld.soの環境変数(run timeの場合)
  • ヘッダファイル
    gccはコンパイル時に必要なヘッダファイルをどのように探しますか?
  • header fileの検索は-Iから
  • その後gccの環境変数C_を探しますINCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
  • 内定ディレクトリを探します.
  • /usr/include
  • /usr/local/include
  • /usr/lib/gcc-lib/i386-linux/2.95.2/include
  • /usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g++-3
  • /usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include

  • ライブラリファイルですが、gccをインストールするときに、所定のprefixがあれば、
  • /usr/include
  • prefix/include
  • prefix/xxx-xxx-xxx-gnulibc/include
  • prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include


  • ライブラリファイル
    cos()等関数ライブラリのオプションに-lmを追加する
  • コンパイル時:gccは-L
  • を探しに行きます
  • またgccの環境変数LIBRARYを探しますPATH
  • 内定ディレクトリ/lib/usr/lib/usr/local/libこれは当初compile gccの時にプログラム内に書いた
  • です.
    実行時のダイナミックライブラリの検索パス
    1プロファイル/etc/ld.so.confで動的ライブラリ検索パスを指定する
    2環境変数LD経由LIBRARY_PATHダイナミックライブラリ検索パスを指定します(この環境変数で複数のダイナミックライブラリ検索パスを指定した場合、パス間は「:」で区切られます)
    3ターゲットコードのコンパイル時にプログラムの動的ライブラリ検索パスを指定します(ターゲットコードのコンパイル時にプログラムの動的ライブラリ検索パスを指定することもできます.これはgccのパラメータ「-Wl,-rpath,」で指定します.複数の動的ライブラリ検索パスを指定する場合、パス間は冒号「:」で区切られます).
    4デフォルトのダイナミックライブラリ検索パス/lib
    5デフォルトのダイナミックライブラリ検索パス/usr/lib
    動的ライブラリの検索パス検索の優先順位は、次のとおりです.
    1ターゲットコードのコンパイル時に指定したダイナミックライブラリ検索パス;
    2環境変数LD_LIBRARY_PATHが指定したダイナミックライブラリ検索パス;
    3プロファイル/etc/ld.so.confで指定したダイナミックライブラリ検索パス;
    4デフォルトのダイナミックライブラリ検索パス/lib;
    5デフォルトのダイナミックライブラリ検索パス/usr/lib.
    リファレンス
    http://www.cublog.cn/u/28781/showart_401631.html
    http://tech.ccidnet.com/art/302/20080219/1365287_1.html