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が表示されましたね?
今日は、まずはビルドして
実行するところまでを行いました。
次回は、コンパイラ言語のメリットとして
インタプリタ言語との速度比較を行なってみたいと思います。
↓↓↓ぜひチェックしてください
~提供中のヒューマンセンシング技術~
◆人物検出技術
歩行者・来店者数計測やロボット搭載も
https://humandetect.pas-ta.io
◆視線検出技術
アイトラッキングや次世代UIに
https://eyetrack.pas-ta.io
◆生体判定技術
eKYC・顔認証のなりすまし対策を!
https://bio-check.pas-ta.io
◆目検出技術
あらゆる目周りデータを高精度に取得
https://pupil.pas-ta.io
◆音声感情認識技術
会話から怒りや喜びの感情を判定
https://feeling.pas-ta.io
◆虹彩認証技術
目の虹彩を利用した生体認証技術
https://iris.pas-ta.io