第2章 GNU コンパイラーコレクション (GCC)
GNU コンパイラーコレクション (通常は GCC の省略形) は、幅広いプログラミング言語に対応する移植可能なコンパイラースイートです。
Red Hat Developer Toolset には GCC 12.2.1 が同梱されています。このバージョンは、Red Hat Enterprise Linux に含まれるバージョンよりも新しいもので、バグ修正および機能強化が数多く追加されました。
2.1. GNU C コンパイラー
2.1.1. C コンパイラーのインストール
Red Hat Developer Toolset では、GNU C コンパイラーが devtoolset-12-gcc パッケージで提供され、「Red Hat Developer Toolset のインストール」 の説明に従って devtoolset-12-toolchain で自動的にインストールされます。
2.1.2. C コンパイラーの使用
コマンドラインで C++ プログラムをコンパイルするには、以下のように gcc
コンパイラーを実行します。
$ scl enable devtoolset-12 'gcc -o output_file source_file...'
これにより、現在の作業ディレクトリーに output_file という名前のバイナリーファイルが作成されます。-o
オプションを省略すると、コンパイラーはデフォルト a.out
でという名前のファイルを作成します。
複数のソースファイルで構成されるプロジェクトで作業する場合、各ソースファイルのオブジェクトファイルを最初にコンパイルしてから、これらのオブジェクトファイルをリンクすることが一般的です。これにより、単一のソースファイルを変更する場合は、プロジェクト全体をコンパイルせずにこのファイルのみを再コンパイルできます。コマンドラインでオブジェクトファイルをコンパイルするには、以下のコマンドを実行します。
$ scl enable devtoolset-12 'gcc -o object_file -c source_file'
これにより、object_file という名前のオブジェクトファイルが作成されます。-o
オプションを省略すると、コンパイラーは、ファイル .o
拡張子が付いたソースファイルからという名前のファイルを作成します。オブジェクトファイルをリンクし、バイナリーファイルを作成します。
$ scl enable devtoolset-12 'gcc -o output_file object_file...'
この scl
ユーティリティーを使用してコマンドを実行すると、これを Red Hat Enterprise Linux システムに優先して使用する Red Hat Developer Toolset バイナリーで実行することができることに注意してください。これにより、デフォルトで Red Hat Developer Toolset gcc
でシェルセッションを実行できます。
$ scl enable devtoolset-12 'bash'
使用中の gcc
のバージョンを確認するには、以下を行います。
$ which gcc
Red Hat Developer Toolset の gcc
実行可能なパスは、/opt
で始まります。以下のコマンドを使用して、バージョン番号が Red Hat Developer Toolset gcc
と一致することを確認することができます。
$ gcc -v
例2.1 コマンドラインでの C プログラムのコンパイル
以下の内容を含むソースファイル hello.c
について考えてみましょう。
#include <stdio.h> int main(int argc, char *argv[]) { printf("Hello, World!\n"); return 0; }
Red Hat Developer Toolset の gcc
コンパイラーを使用して、このソースコードをコマンドラインでコンパイルします。
$ scl enable devtoolset-12 'gcc -o hello hello.c'
これにより、現在の作業ディレクトリーに hello
という名前のバイナリーファイルが作成されます。
2.1.3. C プログラムの実行
プログラムを gcc
コンパイルすると、実行可能なバイナリーファイルが作成されます。コマンドラインでこのプログラムを実行するには、実行ファイルがあるディレクトリーに移動し、これを実行します。
$ ./file_name
例2.2 コマンドラインでの C プログラムの実行
例2.1「コマンドラインでの C プログラムのコンパイル」 にあるように hello
バイナリーファイルを正常にコンパイルしたと仮定して、シェルプロンプトで次のコマンドを実行します。
$ ./hello
Hello, World!