2015年6月23日火曜日

C言語でgccを使ったコンパイル③ gccコマンドの基本的な使い方


詳細な使い方は以下を参照。
コンパイラ(gccコマンド)の使い方

gccの使い方
GCCコマンド・オプション


自分用にまとめてみると基本のパターンは次のようになる。

実行ファイルを作成する
 gcc -o yyyy xxxx1.c xxxx2.c
xxxx1.cとxxxx2.cをコンパイル,リンクして,yyyyという実行ファイルを作成する。
例は2つのファイルだが、1つだけ、あるいは3つ以上も同様。
-o yyyyを省略すると自動的にa.outという実行ファイルになる。

オブジェクトファイルを作成する
 gcc -c xxxx.c
コンパイルしてxxxx.oというオブジェクトファイルを作成する。
実行ファイルを作成する場合とほぼ同様。

オブジェクトファイルをリンクして実行ファイルを作成する。
 gcc -o yyyy xxxx1.o xxxx2.o
xxxx1.oとxxxx2.oをリンクして、yyyy という実行ファイルを作成する。
こちらも上と同様。



インクルードするヘッダファイルの場所を追加
 gcc -I/home/myhome/lib xxxx.c 
ヘッダファイルを探すためのディレクトリを標準システムより先に追加

リンクするライブラリがあるディレクトリとライブラリを追加。
 gcc -L/home/myhome/lib xxxx.c -lzzzz
-Lで標準システムディレクトリに加えて/home/myhome/libをさがし、
-l(小文字のエル)でlibzzzz.aというライブラリとリンクを指定。
ライブラリ名前後の「lib」と「.a」が省略された形となる点に注意。


引数のまとめ
  • -c  コンパイルのみ
  • -o  実行結果のファイル名を-oの直後にくる文字列に指定。
  • -I (大文字のアイ)インクルードするヘッダファイルのあるディレクトリの追加。
  • -L  ライブラリを探すディレクトリを追加。
  • -l (小文字のエル)ライブラリの指定。

他にもあるが、ここでは割愛。
実行ファイルやオブジェクトファイルを作成するのは容易だが、GtkやSDLを利用する場合はヘッダファイルやライブラリが標準システムディレクトリ以外の場所にあるので、その場所を指定しなければならないため、引数がとても長くなる。

例えばSDLでは以下のサイトのサンプルをコンパイルしようとすると、
第268回 SDLで夢のオリジナルゲーム開発
 gcc -o sdltest sdltest.c -lSDL -lSDL_image -lSDL_ttf -lSDL_mixer
のようにディレクトリを複数指定する必要がある。

さらにGTK+3ではヘッダファイルとライブラリを含むディレクトリを調べるための引数はひと通り書き出すと以下の通り。
-I/usr/include/gtk-3.0
-I/usr/include/atk-1.0
-I/usr/include/at-spi2-atk/2.0
-I/usr/include/pango-1.0
-I/usr/include/gio-unix-2.0/
-I/usr/include/cairo
-I/usr/include/gdk-pixbuf-2.0
-I/usr/include/glib-2.0
-I/usr/lib/i386-linux-gnu/glib-2.0/include
-I/usr/include/harfbuzz
-I/usr/include/freetype2
-I/usr/include/pixman-1
-I/usr/include/libpng12
-lgtk-3
-lgdk-3
-latk-1.0
-lgio-2.0
-lpangocairo-1.0
-lgdk_pixbuf-2.0
-lcairo-gobject
-lpango-1.0
-lcairo
-lgobject-2.0
-lglib-2.0
うん、多すぎて扱いきれません。

これを簡単にするための方法は次回。

0 件のコメント:

コメントを投稿