元セブ島在住のエンジニアの僕「Tommy」が、プログラミング・英語・セブ事情を発信するブログ

Tommy's blog

【C言語】プログラムをLinuxでコンパイルする方法【→レンタルサーバでできる!】

1月 13, 2020

プログラム女子
Linuxサーバーで、どうやってC言語をコンパイルすればいいのかな...?
Linuxサーバーでは、手持ちのWindowsのパソコンから、「ターミナル」と呼ばれるツールを使って作業することが多いんだけど、その「ターミナル」を使ってC言語をコンパイルする方法を説明するね。
Tommy

この記事で分かること

  • C言語の「コンパイル」の意味が分かる
  • レンタルサーバーで「コンパイル」する手順が分かる
  • GCCの「コンパイル」のオプションが分かる

C言語プログラムをLinuxでコンパイルする概要

ここでは、自分で作ったC言語プログラムをLinuxサーバーを使ってコンパイルする手順を説明します。「コンパイル」とは、C言語などの人間が理解できる言語を、機械が認識できる言語に翻訳することです。コンパイル方法にはいくつかの種類がありますが、その違いについて本記事では具体例を使って説明します。

C言語プログラムをLinuxでコンパイルする前提環境

この記事では、「Linux CentOS 5.5」の環境で、C言語を実行する方法を説明します。

現在多くのレンタルサーバはLinuxサーバですが、レンタルサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。

もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。

次に、CentOSのバージョンと、C言語コンパイラのバージョンを確認します。

コンパイラとは、プログラムを機械が認識できる言語にコンパイル(翻訳)するツールのことです。

CentOSのバージョン

CentOSのバージョンは「5.5」でした。

$ cat /etc/redhat-release
CentOS release 5.5 (Final)

gcc(コンパイラ)のバージョン

LinuxのC言語コンパイラのGCCのバージョンを確認します。下記のように、GCCのバージョンは「4.1.2」でした。

$ gcc -v
Using built-in specs.
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --disable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=x86_64-redhat-linux
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-55)

C言語プログラムをLinuxでコンパイルする具体例

ここでは、C言語プログラムをコンパイルする方法を具体例を示して説明します。コンパイル方法の中でも「実行ファイル名を指定する方法」、「複数のソースコードファイルをコンパイルする方法」や「複数プログラムファイルから1つの実行ファイルを作る方法」など基本的なコンパイル方法を紹介します。説明は下記の順番で行います。

  1. C言語コンパイル方法1:オプションなし
  2. C言語コンパイル方法2:オプション「-c」で中間ファイルを生成
  3. C言語コンパイル方法3:オプション「-o」で実行ファイル名を指定
  4. C言語コンパイル方法4:オプション「-c」で複数ファイルのコンパイル
  5. C言語コンパイル方法5:オプション「-o」で1つの実行ファイル生成

1.C言語コンパイル方法1:オプションなし

コンパイルは、コマンド「gcc」の引数にコンパイルしたいソースコード(ここではファイル名「hello.c」とします)を渡すことで実行することができます。

下記に、「コンパイルする時のLinux上の操作方法」と「実行ファイルを実行したときの結果」を示します。

  • コンパイル時のコマンド
  • 実行ファイルの実行結果

コンパイル時のコマンド

$ gcc hello.c

オプションなしでGCCコンパイルを実施すると、「a.out」という名前の実行ファイルが生成されます。

実行ファイルの実行結果

$ ./a.out
Hello World

実行ファイル「a.out」が実行されると、「Hello World」の文字列が表示されました。これで、実行ファイルa.outが正しく実行できたことが分かります。

2.C言語コンパイル方法2:オプション「-c」で中間ファイルを生成

コンパイルオプション「-c」を指定してコンパイルすると、オブジェクトファイル「hello.o」が生成されます。このオブジェクトファイルは、ソースコードから実行ファイルにコンパイルするまでに中間のファイルになります。このような中間ファイルは、複数のファイルを1つの実行ファイルにコンパイルする時などに用いられます。

$ gcc -c hello.c

3.C言語コンパイル方法3:オプション「-o」で実行ファイル名を指定

先ほど生成した、オブジェクトファイル「hello.o」を「HELLO」という名前の実行ファイルにコンパイルします。コンパイルオプション「-o」は生成される実行ファイルの実行ファイル名を指定することができます。今回は、実行ファイル名として「HELLO」という名前を指定しました。

下記に、「実行ファイル名を指定してコンパイルする時のLinux上の操作方法」と「実行ファイルを実行したときの結果」を示します。

  • コンパイル時のコマンド
  • 実行ファイルの実行結果

コンパイル時のコマンド

$ gcc hello.c -o HELLO

HELLOが実行を実行すると、下のように「Hello World」の文字列が表示されます。この結果で、「Hello World」という文字列を表示するプログラムの実行ファイルHELLOが正しく生成され、実行できたことが分かります。

実行ファイルの実行結果

$ ./HELLO
Hello World

4.C言語コンパイル方法4:オプション「-c」で複数ファイルのコンパイル

コンパイルオプション「-c」を指定すれば、複数のC言語ソースコードをオブジェクトファイルにすることが可能です。上記のような、「gcc」コマンドのオプションに「-c」を指定することで、「hello.c 」と「hello2.c」ソースコードそれぞれに対応するオブジェクトファイル「hello.o」と「hello2.o」が生成されます。

$ gcc -c hello.c hello2.c

5.C言語コンパイル方法5:オプション「-o」で1つの実行ファイル生成

先ほど生成した、オブジェクトファイル「hello2.o」を「HELLO2」という実行ファイルにコンパイルします。コンパイルオプション「-o」は生成される実行ファイルの実行ファイル名を指定するオプションなので、今回は、「HELLO2」という名前を指定しました。

下記に、「オブジェクトファイルを指定してコンパイルする時のLinux上の操作方法」と「実行ファイルを実行したときの結果」を示します。

  • コンパイル時のコマンド
  • 実行ファイルの実行結果

コンパイル時のコマンド

gcc -o HELLO2 hello2.o

実行ファイルの実行結果

$ ./HELLO2
Hello World

先ほどと同様に、実行ファイル「HELLO2」を実行すると、「Hello World」の文字列が表示されました。これで、実行ファイル「HELLO2」が正しく実行できたことが確認できました。

C言語プログラム実行の手順について

linux環境で、どのように自分で作ったC言語プログラムを実行の手順は、次の記事で説明しています。