RSS

gcc コンパイラの使い方

31 8月

はじめに

gcc は C/C++ コンパイラです。コマンド gcc を実行して「見つからない」というメッセージが表示されたら、インストールされていないのでインストールする必要があります。Ubuntu なら下のようにします。

sudo apt-get install gcc

これだけだと、C 言語だけしかコンパイルできないので、C++ も使う場合は下のようにして g++ をインストールします。

sudo apt-get install g++

 

ついでに make もインストールしておきます。これはビルドツールです。

sudo apt-get install make

 

基本的な使用方法

文字列を表示するだけの簡単なプログラム (HelloWorld.c etc) など、単純な使い方は次のようになります。

gcc HelloWorld.c

このコマンドを実行するとエラーがなければ、a.out というファイルが作成されます。この a.out が実行ファイルですが、通常は -o オプションを使って実行ファイルの名前を指定します。

gcc -o HelloWorld HelloWorld.c

このコマンドを実行すると、HelloWorld という名前のファイルが作成されますが、これが実行ファイルです。

ソースファイルが C++ の場合は gcc の代わりに g++ (あるいはオプション -x c++) を使用します。

g++ -o HelloWorld HelloWorld.cpp

一般的には次のような形式でコマンド入力します。options はオプションで “gcc –help” と入力すると英語で説明が表示されます。file はソースファイルやオブジェクトファイルです。

gcc [options] file…

主なオプション

コンパイルオプション

オプション 意味
-c コンパイルのみを行う。.o ファイルが作成される。
-g デバッグ情報を生成する。gdb を使う場合にも指定することができる。(ただし、-ggdb のほうが多くのデバッグ情報を生成する)
-std=… C コンパイラの仕様を指定する。(例) C 言語の新しい仕様 C11 でコンパイルする場合 -std=c11
-ggdb gdb 用のデバッグ情報を生成する。
-Idir ディレクトリ dir の中のヘッダファイルを検索する。(例) -Iinc
-Ldir ライブラリファイルを検索するディレクトリを指定する。(例) -Llib
-o 出力ファイルの名前を指定する。
-O 最適化を行う。-O0 は最適化を行わない。-O2, -O3 はより高度な最適化を行う。
-S アセンブラソースを出力する。(参考) -masm=intel とすると Intel 記法、指定なしだと AT&T 記法。
-w すべての警告メッセージの出力を禁止する。
-x language 入力ファイルの言語を指定する。c, c++, objective-c, assembler などが指定できる。(注意) 実際には他に必要なヘッダやライブラリの指定が必要。

 

リンクオプション

gcc はコンパイルの後、リンカを呼び出してリンクも行うことができる。このため gcc でリンカのオプションも指定できる。リンカオプションは gcc コマンドの最後に追加する。

オプション 意味
-llibrary library を探してリンクする。(例) -lncurses
-s すべてのシンボルテーブルと再配置情報を削除する。gdb を使う場合は指定しないこと。
-S 出力ファイルがアセンブラソースになる。
-static 静的なライブラリを作成する。
-shared 動的ななライブラリ (.so) を作成する。(例) gcc -shared test.c -o libtest.so

 

実は C や C++ 以外にも対応している

gcc は以下の言語に対応している。デフォルトは C だが -x オプションで他の言語を指定できる。ただし、-x だけを指定してもエラーになる。その言語で必要なライブラリやヘッダを別途指定しなければならない。

  • C
  • C++
  • Objective-C
  • Go Language (gcc 4.7.1 以上)
 
コメントする

投稿者: : 2016/08/31 投稿先 gcc

 

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

 
%d人のブロガーが「いいね」をつけました。