GNU Compiler Collection (GCC)は、C及びC++のコンパイラである。フリーソフトウェアであり、UnixMicrosoft Windowsなどさまざまなプラットフォームで使用できる。

LinuxでC言語のソースファイルをコンパイルする場合、gccコマンドを使用するのが一般的である。

gcc [options] source-file

gccのオプション:

-c

実行可能ファイルではなく、オブジェクトファイル(*.o)を作成する。

-fPIC

Position Independant Codeで作成する。

--help
ヘルプ情報を表示する。
-I directory

ヘッダファイル(インクルードファイル)を探すディレクトリを指定する。

-o file

出力するファイル名をfileとする。-oオプションを省略した場合、a.outというファイル名で作成する。

-shared

共有オブジェクト(*.so)を作成する。

gccのプリプロセッサオプション:

-include file

通常の入力ファイルが処理される前にfileを処理する。fileに含まれる内容は、一番最初にコンパイルされる。

-imacros file

通常の入力ファイルが処理される前にfileを処理するが、その結果の出力を捨てる。fileによって生成された出力は捨てられるため、「-include file」の処理結果の影響は、file内に記述されたマクロが入力ファイル内で使用可能になることだけである。

gccの-imacrosオプションを使用する例として、ソースプログラムhelloworld.cの内容を次に示す。

#include <stdio.h>

main() {
    printf("%s\n", HELLO_WORLD);
}

マクロを定義したファイルhelloworld.hの内容を次に示す。

#define HELLO_WORLD "Hello, world!"

ソースプログラムの中で#include "helloworld.h"を記述してインクルードすることもできるが、gccの-imacrosオプションを指定してコンパイルすることもできる。

$ gcc -imacros helloworld.h helloworld.c

gccデバッグオプション

-g
OSのネイティブのフォーマットでデバッグ情報を生成する。GDBはこのデバッグ情報に基づいて動作することができる。

Linuxで静的ライブラリ(*.a)を作成する例を次に示す。

$ gcc -c sample.c
$ ar rv libsample.a sample.o

Linuxで共有ライブラリ(*.so)を作成する場合、-fPIC(Position Independant Code)オプションを指定する。例を次に示す。

$ gcc -fPIC -shared sample.c -o libsample.so

共有ライブラリとリンクした実行可能ファイルを実行するには、あらかじめ環境変数LD_LIBRARY_PATHに共有ライブラリを配置したディレクトリのパスを設定しておく必要がある。

環境変数LD_LIBRARY_PATHにパスを設定していないと、実行可能ファイルを実行した際に以下のエラーが出力される。

$ ./samplelmf
./samplelmf: error while loading shared libraries: libsample.so: cannot open shared object file: No such file or directory
スポンサーリンク