C++プログラミング/Linux
C++プログラムはg++コマンドでビルド(コンパイル・リンク)することができる(図1)。
図1
図1(fedora15 日本語版)では、エディタgeditで作成したプログラム・ソース・ファイルsample1.cppを保存後、ファイル名sample1の実行ファイルにビルドしている。g++コマンドは
g++ -o name1 name1.cpp
というふうに実行すると、ソースコードファイルname1.cppがコンパイル・リンクされて実行ファイルname1が作成される。この実行ファイルはカレントディレクトリ(「./」を付けて示される)に作成されるので、呼び出して実行するときはファイル名の先頭に./を付けて
./name1
というように呼び出す。
「g++がありません」というようなメッセージが表示された場合、それに続けて「g++をインストールしますか」と問われているときは、Yesのyキーを押せばよいが、問われていないときはメニュ「アプリケーション|システムツール|ソフトウェアの追加/削除」を選んでインストールする(図2)。
図2
「アプリケーションの追加/削除」を選ぶと図3のウィンドウが表示される(図3)。
図3
「検索」の左の欄に「g++」を設定して「検索」をクリックすると右側のペインに対象となるソフトウェアがリストアップされる。すべてにチェックを付けて右下の「適用」ボタンをクリックするとインストールの作業が始まる。インストールの作業が終了したら右上角のXをクリックして閉じる。この後、再度「g++ …」を実行してみる。
複数のソースコードファイルをビルドするときは、それらのファイル名を並べて指定しておけばよい。ヘッダーファイルはソースコードに挿入されるので指定する必要はない。ただし、ファイル名が“と”で囲まれたヘッダーファイルは、ソースコードファイルと同じディレクトリに用意しておく。ファイル名が<と>で囲まれたヘッダーファイル名は、システムに登録されているディレクトリから探される。
例えば、プログラムsample2.cppで他のソースコードファイルmyInc.cppにある関数twiceを使用しているときは図4のように
g++ -o sample2 sample2.cpp myInc.cpp
とすればよい。
図4
図4の例の場合、3つのファイルは以下のようになっていて、カレント・ディレクトリ(現在のディレクトリ)に置かれている。
========== sample2.cpp =========
#include <iostream>
#include "myInc.h"
using namespace std;
int main(){
cout << "a = ";
int a;
cin >> a;
cout << "2 * a = " << twice(a)
<< endl;
return
0;
}
==========================
==========================
========= myInc.h ============
int twice( int i
);
============================
========= myInc.cpp ===========
int twice( int i
){
return
2 * i;
}
==========================
プログラムprg.cppがソースコードファイルsrc1、src2、src3の関数とか変数などを使用しているときは、
g++ -o prg prg.cpp src1.cpp src2.cpp src3.cpp
とg++を呼び出せばよい。ヘッダーファイルは指定する必要はないが、ファイル名が“と”で囲まれているヘッダーファイルはソースコードファイルと同じディレクトリ(カレント・ディレクトリ)に置いておく。ファイル名が<と>で囲まれているヘッダーファイルは、システムに登録されているディレクトリから探される。
コマンドは、上矢印キーを押すと、以前に実行したものが表示される。プログラミングにおいて何度もg++を呼び出すときは、2回目以降は上矢印キーを押せばよい。ファイル名なども途中まで入力してTabキーを押すと後の部分が表示される(一意に決まる範囲で)。
テキストファイル入出力についてはウェブサイト<テキストファイル入出力>で説明している。
LinuxでVisual C++/Win32のプログラム、例えば<Visual
C++/Win32(標準C++準拠)サンプルプログラム>にアップロードされているもの、を用いる場合の注意点:
まず、ヘッダーファイルstdafx.hのインクルード
#include "stdafx.h"
を削除する。stdafx.hはVsiual C++が自動的に用意するもので、Linuxではこれを指定するとstdafx.hに関するエラーが出る。
メイン関数頭部
int _tmain(int argc, _TCHAR* argv[])
をLinux用に
int main()
などと変更する。
プログラムファイルが圧縮ファイル*.zipとして用意されているときは、Linuxの場合でもWindowsの場合と同様にファイル名(*.zip)をマウスの右ボタンでクリックして表示されるメニュから「ここに展開する」を選んで展開することができる。Visual C++のプログラムのときは、ソースコードファイル*.cppなどは、展開して作成されたフォルダの1つ下のフォルダにある。例えば、sample.zipを展開すると、フォルダsampleが作成される。このフォルダsample内にさらにプロジェクト用のフォルダsampleがある。このプロジェクト用のフォルダsample内にソースコードファイル*.cppなどが格納されている。展開されたファイルの*.cppファイルや*.hファイルは上に説明したちょっとした変更を加えればそのまま用いることができる。ただし、日本語を含む場合は注意が必要である。日本語部分をLinux用文字コードに変換しておかないとLinux上で文字化けする。Visual C++で作成したソースプログラムの日本語部分をLinux用に変換するコマンドにnkfコマンドがある。
nkf -w filename1 > filename2
と実行すると、Visual C++で作成したfilename1の中の日本語文字コードがLinux用に変換されてfilename2に格納される。例えば、Visual C++で作成したファイルをsampleWin32.cppとするとき
nkf -w sampleWin32.cpp > sampleLinux.cpp
と実行すれば、sampleLinux.cppはLinux上で日本語が表示される。
なお、fedora15をインストールすると英語版がインストールされるが、これは簡単な操作で日本語版に変更することができる。この操作についてはウェブサイト<Fedora15の日本語版>で説明した。
Fedora15のソフトウェア更新におけるエラー例を<Fedora15のソフトウェア更新のトラブル>で扱っている。
関連文献: 岡本安晴「大学生のための心理学VC++プログラミング入門」勁草書房