gccコンパイラの一般的なオプションの意味

3622 ワード

gccは、GNUプロジェクトにおけるANSI C規格に適合したコンパイルシステムであり、C、C++、Object C、Javeなど多くの言語で作成されたプログラムをコンパイルすることができる.gccはまたクロスコンパイルツールとして機能し、現在のCPUプラットフォーム上で複数の異なるアーキテクチャのハードウェアプラットフォームのためにソフトウェアを開発することができる.
gcc名称:GNUプロジェクトC andC++CompilerGNU CompilerCollection
gccのコンパイルプロセスには、•前処理(Pre-Processing)gcc-E testの4つのステップがある.c  -o  test.i   //.iファイル•コンパイル(Compiling)gcc-S test.i  -o   test.s  //.sファイル・アセンブリ(Assembling)gcc-c test.s  -o  test.o   //.oファイル・リンクgcc test.o-o test//binファイル
c++であればgccを直接g++に変更すればよい.
プロジェクトの実践で最もよく使われるコンパイルオプションはgcc-c testである.c          //.oファイル、gcc-o test test.c//bin実行可能ファイルgcc test.c               //test.out実行可能ファイル.ここではターゲットファイルを省略する、gccはデフォルトで実行可能なファイルを生成する、名前は:コンパイルファイル.out
gccの基本的な使用形式:$gcc[オプション]コンパイルするファイル[オプション][ターゲットファイル]の一般的なオプションと意味:gccには100以上のオプションがあり、主に全体的なオプション、アラートとエラーオプション、最適化オプション、アーキテクチャ関連のオプションが含まれています.以下では、一部の一般的なオプションについてのみ説明する.-cはコンパイルのみでリンクされず(ソースコードのみをターゲットコードにコンパイル)、ターゲットファイル「.o」を生成する.-Eはプリコンパイルのみを行い、他の処理は行わない.このオプションが使用されると、プリプロセッサの出力はファイルに格納されるのではなく標準出力に送られる.-Sはコンパイルのみでアセンブリされず、アセンブリコードを生成する.(Cコードにアセンブリ言語ファイルが生成された後、コンパイルを停止します.)gccで生成されたアセンブリ言語ファイルのデフォルト拡張子は.sです.-o file出力ファイルをfileに出力します(すなわち、生成された実行可能ファイルに指定されたファイル名を使用します.)-Oソースコードを基本的に最適化します.(主にジャンプバックと遅延バックスタックの2つの最適化が行われます).これらの最適化は、ほとんどの場合、プログラムの実行を高速化します.-O 2は、可能な限り小さく、可能な限り速くコードを生成します.例えば、-O 2、-O 3、-on(nは通常0-3)O 2は、-O 1の最適化の完了に加えて、命令調整などの追加の調整作業を行う.-O 3は、ループ展開および処理特性に関連する他の最適化作業を含む.オプションは、コンパイルの速度を-Oを使用する場合よりも遅くするが、通常生成されるコードの実行速度はより速くなる.
$ gcc test.c -O3
$ gcc -O3 test.c
$ gcc -o tt test.c -O2
$ gcc -O2 -o tt test.c

-g実行可能プログラムに標準デバッグ情報を含める(GNUデバッガで使用可能なデバッグ情報を生成してプログラムをデバッグする).
-pgはコンパイルされたプログラムに追加のコードを追加します.プログラムを実行すると、gprof用の剖析情報が生成され、プログラムの消費時間が表示されます.
-vコンパイラ内部で各プロシージャをコンパイルするコマンドライン情報とコンパイラのバージョンを印刷する
-ヘッダファイルディレクトリを指定します.ヘッダファイルが現在のディレクトリにあるなどの相対パスを使用して、-I.で指定できます.
注意:ここは大文字iです
-Lライブラリファイルディレクトリを指定します.ライブラリファイルが現在のディレクトリにあるなどの相対パスを使用できます.L.で指定できます.
-lプログラムがリンクするライブラリを指定します.-lパラメータはライブラリ名に続きます.ここではライブラリファイル名のヘッダlibと末尾を説明した.so削除はライブラリ名です.
注意:ここは小文字のLです
-includeはヘッダファイルを含むために使用されます.一般にヘッダを含むファイルはソースコードに#includeで実現されるため、-includeパラメータはあまり使用されません.
-staticリンク静的ライブラリ-llibrary接続libraryというライブラリファイル-Wallはgccが提供する警告情報を印刷します-wすべての警告情報を閉じます-vはすべてのコンパイルステップをリストします-I,-Lと-lについてのいくつかの補足説明:/usr/includeディレクトリは一般的に指定する必要はありません.gccはそこに行って探すことを知っています.しかし、ヘッダファイルが/usr/icncludeディレクトリにない場合は、ヘッダファイルが/myincludeディレクトリに格納されているなど、-Iパラメータでgccに伝える必要があります.コンパイル時に-I/myincludeを追加し、追加しないと「xxxx.h:No such file or directory」のエラーが発生します.-Iパラメータを指定すると、gccはまずこのディレクトリを検索します.次に、デフォルトのパス(/usr/include)を検索します.たとえば、サードパーティが提供するライブラリの名前をlibtest.soと呼びます.libtest.soを/usr/libにコピーし、コンパイル時に-ltestパラメータを加えるだけで、libtest.soライブラリを使用できます.(もちろんlibtest.soライブラリの関数を使いますが、libtest.soとセットになっているヘッダファイルも必要です).「/usr/bin/ld:cannot find-lxxx」、つまりリンクプログラムldはその3つのディレクトリにlibxxxが見つからない.so、この时もう一つのパラメータ-Lが役に立ちます.例えば、よく使われるX 11のライブラリです./usr/X 11 R 6/libディレクトリの下に置いてあります.コンパイルするときは-L/usr/X 11 R 6/lib-lX 11パラメータを使います.-Lパラメータはライブラリファイルがあるディレクトリ名についています.例えばlibtestをsoは/aaa/bbb/cccディレクトリの下に置かれ、リンクパラメータは-L/aaa/bbb/ccc-ltestである.また、ほとんどlibxxxx.soはただのリンクであり、RH 9を例に挙げるlibm.so/lib/libmにリンクso.x,/lib/libm.so.6はまた/lib/libm-2.3にリンクする.2.so、このようなリンクがなければ、ldはlibxxxxしか探していないので、やはりエラーが発生します.so、だからxxxxライブラリを使うならlibxxxxだけです.so.xあるいはlibxxxx-x.x.x.x.so、1つのリンクをしてln-s libxxxxxx-x.x.so libxxxx.so.手動でリンクパラメータを書くのは面倒で、多くのライブラリ開発パッケージはリンクパラメータを生成するプログラムを提供して、名前は一般的にxxxx-configと呼ばれて、具体的にはここをクリックすることができます(http://blog.csdn.net/zhuxiaoyang2000/article/details/5575194).
参照先:
http://blog.csdn.net/rain208/article/details/4060384
http://blog.csdn.net/zhuxiaoyang2000/article/details/5575194