C++でビルド(コンパイル&リンク)入門 vol.1 〜コンパイルしてみよう〜

2019.04.26

 

こんにちは。代表の大野です。

 

4月という新入社員の方が増える時期だからかなのか
今月は、以前僕が書いた

 

画像処理とかOpenCVのブログを
多くの方にご覧いただけているようです。

 

バックナンバー

OpenCV/C++で画像処理入門 vol1. 画像を表示してみよう

OpenCV/C++で画像処理入門 vol2. 画像を加工してみよう

OpenCV/C++で画像処理入門 vol3. 画像に図形を描画してみよう

OpenCV/C++で画像処理入門 vol4. 画像に文字を書き込んでみよう

OpenCV/C++で画像処理入門 vol5. 画像を行列にしてみよう①

OpenCV/C++で画像処理入門 vol.6 画像を行列にしてみよう②

 

 

読まれている方が増えると
ブログを書く励みになりますね。

 

ありがとうございます。
参考になれば幸いです。

 

 

最近は、Go言語とか、
Rustなんかも注目されていますが

 

C++って、まだまだ有用な
プログラミング言語です。

 

僕も書けば書くほど好きになっていく
そんな言語なので、

 

ぜひ多くの方にC++を使った開発を
楽しんでもらいたいものです。

 

 

ということで、
読んでくれている人が増えてくると

 

がぜんモチベーションが上がってくるのが
ブログというものです。

 

 

今日からまた、C++関係の
ブログを書いていこうかなと思います。

 

 

シリーズもので書いていきますので
今日から何回かにわけて

 

ビルドまわりについて
書いていきたいと思います。

 

 

名付けて、

 

「C++でビルド入門シリーズ」

 

です。

 

コンパイラ言語とインタープリタ言語

まず予備知識です。

 

C++言語は、C言語と同じ
コンパイラ言語となります。

 

コンパイラ言語とは、簡単に言うと、
ソースコードが書かれたプログラムを

 

機械語に翻訳したプログラムにして(コンパイルといいます)
それを実行させる方式です。

 

(例)

1
2
3
$ gcc -o main main.c
$ ./main
> hello world!

※ mac環境での実行例

 

こんな感じです。

 

gccなんちゃら、というコマンドで

 

main.c

 

というC言語のファイルの
コンパイルを行なっています。

 

コンパイルされてできた、

 

main
というファイルを./で実行すると
Hello Worldが表示されました。

 

のちほど演習しますので、
まずは「ふぅーん」という感じで
眺めていただくだけでOKです。

 

 

それに対して、
PHPとかPythonとかRubyのような言語は

 

「インタープリタ言語」
というものにジャンルわけされます。

 

 

Pythonとか書いたことがある人は

 

Hello Worldが
一行のプログラムでできる

 

そんな感動を覚えた方もいると思いますが、

 

コンパイラ言語のように
コンパイルを必要せず、

 

Pythonプログラムを
そのまま実行させることができ

 

プログラム実行時に、
都度機械語に解釈しながら実行させる方式になります。

 

1
2
$ python main.py
> Hello world!

 

 

コンパイル?ビルド?

じゃあ、さっそくコンパイルしてみましょう。
といったときに

 

CやC++経験者の方で、

 

「コンパイルじゃなくてビルドだろ」

 

というツッコミをしたくなる方もいるかもしれません。

 

 

コンパイルとは、
機械語に翻訳する作業みたいなもので

 

プログラムによっては、
さらにその後

 

リンクという作業を行なってはじめて
実行できるようになります。

 

 

そのためC/C++言語で
プログラムを書いて

それを実行させるためには
基本的には、コンパイル&リンクが必要になります。

 

コンパイルとリンク作業を合わせて
ビルドといったりします。

 

人によっては、
ビルドのことを、コンパイルと言ったり
ごっちゃになってる人もいますよね。

 

 

たとえば、一生懸命プログラムを書いて
いざ、ビルドできないときに、

 

コンパイルエラーなのか
リンクエラーなのか
はっきり理解しておくと、

 

バグ修正のあたりがつけやすいため
この辺、区別して理解しておくことを
おすすめします。

 

なので、今日からは

 

「これコンパイルしといて」

 

といってる人がいたら

 

「リンクもしないと動かないですよ?」

 

と意地悪をしてあげたいところを
グッとこらえて

 

このブログをみながら、
ビルドしてあげてくださいね。

 

 

さて、コンパイルするには、
コンパイラ
というものを使って行います。

 

リンクも実際には、
コンパイラが行なってくれたりもします。

 

 

しかしながら、
最近は便利なツールが出回っており

 

Visual Studioとか
Eclipseといった

 

統合開発環境(IDE)で
プログラムを書いた場合

 

コンパイラを使うという意識は
あまりなしに

 

「ビルド」ボタン(▶︎)をポチッで
動くようになりますよね?

 

そういった便利な環境を使い倒すことも
もちろんいいんですが、

 

このブログでは、
ターミナルなどを使って
泥臭くビルドを行なってみたいと思います。

 

 

とりあえずビルドしてみる

ということで、ますはビルドを
実際に行なってみましょう。

 

コンパイラにはいくつかありますが
今日は、一般的な

 

gcc(g++)
を使ってみたいと思います。

 

まずは、Hello Worldを
表示させるだけのプログラムを
C++で書いてみましょう。

 

 

ちなみに、
以下はmacを使って行なっています。

 

main.cpp

1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;

int main()
{
 cout << "Hello World!" << endl;
 return 0;
}

お次に、ターミナルを開いて、
このファイルをビルドしてみます。

 

万が一、gccが入ってない方は、
Qiitaなどを参考にインストールしておいてください。

 

 

1
$ g++ -o main main.cpp

どうでしょうか?

 

同じディレクトリに
「main」というファイルが
できたと思います。

 

 

さて、このコンパイルの方法は、
C言語ソースであれば、gccコマンドになりますが、

 

C++言語ソースをコンパイルするには
g++というコマンドになりますのでご注意ください。

 

それから続いて、オプション「o」によって
出力ファイル名を指定することができます。

 

このオプション指定なしで
ビルドを行うと、a.outというファイル名になります。

 

1
$ g++ main.cpp

 

 

 

ビルドしたプログラムを実行する

さて、ここまででビルドしてできた
mainというプログラムを
実行してみましょう。

 

実行するには、ターミナルから、
「./」をつけてファイルを実行させるだけです。

 

1
2
$ ./main
> Hello world

 

いかがでしたか?
Hello worldが表示されましたね?

 

 

今日は、まずはビルドして
実行するところまでを行いました。

 

次回は、コンパイラ言語のメリットとして
インタプリタ言語との速度比較を行なってみたいと思います。


Top