Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

C++ Linux

C++をLinuxでコンパイルする方法について

投稿日:2021年8月24日 更新日:

 

<目次>

(1) C++をLinuxでコンパイルする方法について
 (1-1) STEP0:【事前準備】ターミナル機能の準備(ターミナル、Teraterm、Putty)
 (1-2) STEP1:【事前準備】C++コンパイラのインストール
 (1-3) STEP2:【事前準備】テキストエディタのインストール
 (1-4) STEP3:HelloWorld用プログラムの作成&サーバにアップロード
 (1-5) STEP4:プログラムのコンパイル
 (1-6) STEP5:プログラムの実行
 (1-7) 補足:もしPG作成もサーバ側で行う場合

(1) C++をLinuxでコンパイルする方法について

今回はC++をLinuxでコンパイルする方法という事で、Visual Studio等が使えない環境(※補足1)においてC++を開発する場合のやり方について説明します。

(※補足1)
Visual StudioはWindowとMacのみ対応しており、Linuxでは使えません。しかし代替策としてVisual Studio Codeが使用できます。ただし、VS CodeはIDEではなく「エディタ」の括りであるため、Visual Studioの代替にはなりません。

全体像としては次のようなイメージになります。まず前半のSTEP0、1、2で必要なソフトウェアを導入して、後半のSTEP3でテキストエディタを使いプログラムを作り、STEP4、5でサーバ側でのコンパイル~実行を行います。

(図100)

(1-1) STEP0:【事前準備】ターミナル機能の準備(ターミナル、Teraterm、Putty)

ターミナルはOSのシェル(ユーザがカーネルを操作する為のIF)を操作するためのIFです。今回はクライアントからリモート接続でターミナル機能を実現できるTeratermを導入し、リモートでサーバを操作します(Putty等でも代替可能)。
 
Teratermは下記のサイト等からダウンロードできます。
 

(1-2) STEP1:【事前準備】C++コンパイラのインストール

C++をコマンドラインからコンパイルするためには、「GCC」(※注1)や「mingw」といったコンパイラが必要です。今回はGCCコンパイラを含むパッケージ「Development Tools」をインストールします。
 
(※注1)GCCは「GNU Compiler Collection」の略で、複数のメジャーなプログラミング言語(CやC++)のコンパイラを統合して配布したものです。
 
①「Development Tools」をインストール
・下記コマンドを実行します。
(コマンド)
$ sudo yum groupinstall "Development Tools" --setopt=group_package_types=mandatory,default,optional
 
(図111)①

・「Is this ok [y/d/N]:」で「y」を入力
(図111)②

・「Complete」が出たら完了
(図111)③

②インストール後のチェック
・チェック#1:gccのインストール場所を確認します
(コマンド)
$ whereis gcc
 
(結果例)
gcc: /usr/bin/gcc /usr/lib/gcc /usr/libexec/gcc /usr/lib64/ccache/gcc /usr/share/man/man1/gcc.1.gz
 
(図112)①

・チェック#2:コンパイラのバージョン確認
 
(コマンド)
$ gcc –version
 
(結果例)
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

 

目次にもどる

(1-3) STEP2:【事前準備】テキストエディタのインストール

次にテキストエディタをインストールします。これはローカルでプログラムを編集する用です。特にメジャーな所だと「サクラエディタ」や「Notepad++」などが使いやすいと思いますが、何でもOKです。
 
・サクラエディタ
 
・Notepad++
 

(1-4) STEP3:HelloWorld用プログラムの作成&サーバにアップロード

・①HelloWorld用プログラムの作成
先ほど導入したテキストエディタで下記のHello World用プログラムを作成します。名前は「test1」で拡張子は「.cpp」で保存します。
 
#include 
using namespace std;
int main() 
{
    cout << "Hello, World Rainbow Engine!\n";
    return 0;
}

(図131)

・②サーバにアップロード
TeraTermのSSH SCP等で、作成した「test1.cpp」をサーバの任意のディレクトリに配置します。
(図132)

(1-5) STEP4:プログラムのコンパイル

・①下記コマンドでコンパイルを行います。
(コマンド)
$ cd [test1.cppが格納されているディレクトリ]
$ g++ -o rainbowtest test.cpp

(図141)


生成後にlsコマンドで「rainbowtest」が生成されたか?を確認します。
(図142)

(補足)
「g++」がコマンドで「-o」オプションで制せ英される実行形式ファイル(.out)の名前を「rainbowtest」に指定しています。最後の「test.cpp」は先ほどアップロードした、コンパイル対象のC++モジュールです。
 

目次にもどる

(1-6) STEP5:プログラムの実行

コマンドラインから実行する場合は次のように実行します。
 
(コマンド)
./hello
 
実行した結果「Hello, World Rainbow Engine!」が表示されればOKです。
(図151)
 

目次にもどる

(1-7) 補足:もしPG作成もサーバ側で行う場合

もしプログラム作成作業も全てサーバ側で行いたい場合、STEP2のテキストエディタをサーバ側にインストールする必要があるのと、クライアント⇒サーバにリモートデスクトップするための環境を用意する事が望ましいです(GUIによる操作が出来るため)。
 
各STEPの工程は次のように変化します。
(表)
STEP0:【事前準備】ターミナル機能の準備(ターミナル、Teraterm、Putty) ⇒代わりにリモートデスクトップ環境を構築する
(参考)https://rainbow-engine.com/rdp-vncserver-centos7/
STEP1:【事前準備】C++コンパイラのインストール 変更なし
STEP2:【事前準備】テキストエディタのインストール ⇒サーバ側で実施(geditやviエディタなどを導入)
STEP3:HelloWorld用プログラムの作成&サーバにアップロード ⇒サーバ側で実施(geditやviエディタなどを使って作成)
STEP4:プログラムのコンパイル 変更なし
STEP5:プログラムの実行 変更なし

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-C++, Linux

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Linuxのprocディレクトリとは?用途や中身について

  <目次> (1) Linuxのprocディレクトリとは?用途や中身について  (1-1) procディレクトリとは?  (1-2) procディレクトリの中身 (1) Linuxのpro …

ポインタと参照の違いについてサンプルPGを使ってご紹介

  <目次> (1) ポインタと参照の違いについてサンプルPGを使ってご紹介  (1-1) ポインタと参照の概要  (1-2) 両者の違い①:宣言/初期化  (1-3) 両者の違い②:再代入 …

C++の動的メモリ割当と静的メモリ割当の違いについて

  <目次> (1) C++の動的メモリ割当と静的メモリ割当の違いについて  (1-1) 静的メモリ割当てとは?  (1-2) 動的メモリとは?  (1-3) 動的メモリの割当て  (1-4 …

C++のマルチスレッド処理のサンプルや概要について

  <目次> (1) C++のマルチスレッド処理のサンプルや概要について  (1-1) C++のマルチスレッドの概要  (1-2) 構文1:関数ポインタ式  (1-3) 構文1(例):関数ポ …

C++の値渡しと参照渡しの使い分けや違いについて

<目次> (1) C++の値渡しと参照渡しの使い分けや違いについて  (1-1) 「値渡し」とは?  (1-2) 「参照渡し」とは?  (1-3) 「値渡し」と「参照渡し」の使い分け (1) C++の …

  • English (United States)
  • 日本語
Top