MinGW

2008/10/12

WindowsにコンソールモードのGnuplotをインストールする

数値計算のデータをプロットするとき大変お世話になるGnuplotをWindowsにインストールする。

GnuplotにはWindows用のwgnuplotが用意されているが、このwgnuplotはLinuxで使うgnuplotとは使い方が異なる。そこで今回は、次のような方針でGnuplotをインストールする。

  • wgnuplotのように起動後に別のウィンドウを起動することなくコマンドプロンプト上で操作する。
  • Linux上で作ったGnuplotを呼び出すコードをWindowsでも書き換えることなしに使えるようにする。(terminal x11は除く)

まずはSourceForgeからgp424win32.zipをダウンロードして解凍する。解凍したら、後で使うのでとりあえず放置。このwgnuplotはbinフォルダ内のwgnuplot.exeを起動するだけで使えるけど、コンソールモードがないし、プログラムから呼び出すパイプ処理もLinuxのそれとは違う。

ではコンソールモードはどうするのかと言うと、「gnuplotメモ」にこんな文言がある。

Octave3.0.2+Forge20080831 Mingw版 にコンソールモードのgnuplot 4.3 (CVS)が添付されています

というわけでSourceForgeからOctave3.0.2のインストーラをダウンロードしてくる。次にインストーラを起動してCドライブ直下にでもインストールする。

インストールしたら「gnuplotメモ」にもあるとおりOctaveのbinフォルダ内にある次のファイルをコピーする。

pgnuplot.exe
wgnuplot.mnu
wgnuplot.hlp
gd.dll
fontconfig.dll
expat.dll
freetype-6.dll
zlib1.dll
libgcc_tdm_dw2_1.dll
jpeg.dll
png12.dll

コピー先はCドライブ直下に「gnuplot」というフォルダを作り、その中に「bin」フォルダを作ってその中。つまり、「C:\gnuplot\bin」内にコピーする。

これで環境変数PATHに「C:\gnuplot\bin」を追加すればコンソールモードのgunplotが使えるようになる。ただしコマンドはgnuplotではなくてpgnuplot。

コマンドはエイリアスでgnuplotにできるけど、プログラムから呼び出すときはエイリアスを使うことはできない。そこでpgnuplot.exeの名前ををgnuplot.exeに変更してしまう。

また、このままではpostscriptファイルの出力ができないので以下のような手順でファイルをコピーする。

  1. wgnuplotのbinフォルダ内にあるshareフォルダをC:\gnuplot\bin内にコピー
  2. wgnuplotのcontribフォルダをC:\gnuplot内にコピー
  3. C:\gnuplot内にshareフォルダを作り、その中にOctaveのshareフォルダ(C:\Octave\3.0.2_gcc-4.3.0\share)内にあるgnuplotフォルダをコピーする

これでかなりそれっぽく動くようになる。試しに次のようなプログラムを動かしてみる。

/*==================================================*/
// 単振動シミュレーション
// using Euler Method
// 2008/12/20
// Hiroshi Nishimura
/*==================================================*/

#include <stdio.h>
#include <math.h>

#define TIME 50     // 終了時刻
#define DT   0.01   // 時間刻み

// Gnuplotによるアニメーション
void plotter(FILE* gp, double t, double x);

/*==================================================*/
//  微分方程式 (d/dt)^2{x} = -x
//  ↓
//  d/dt{x} = +v
//  d/dt{v} = -x
/*==================================================*/
double dxdt(double v) { return +v; }
double dvdt(double x) { return -x; }

int main(void)
{
  int    it;
  double x    = 0.0;                  // 初期位置
  double v    = 1.0;                  // 初期速度
  double t    = 0.0;                  // 現在時刻
  int    tmax = (int)ceil(TIME/DT);   // ループ回数
  FILE*  gp   = popen("gnuplot", "w");

  for(it = 1; it <= tmax; it++) {
    double x_old = x;
    double v_old = v;

    t = it*DT;
    x = x + DT*dxdt(v_old);
    v = v + DT*dvdt(x_old);

    plotter(gp, t, x);
  }

  fprintf(stderr, "End. Hit Return Key\n");
  getchar();
  pclose(gp);
  
  return 0;
}

void plotter(FILE* gp, double t, double x)
{
  fprintf(gp, "set title 'Euler T = %4g'\n", t);
  fprintf(gp, "set xrange[-5:5]\n");
  fprintf(gp, "set yrange[-1:1]\n");
  fprintf(gp, "plot '-' with points title 'Point'\n");
  fprintf(gp, "%g, %g\n", x, 0.0);
  fprintf(gp, "end\n");
  fflush(gp);
}

簡単な単振動のアニメーションを出力するプログラムなのだが、アニメーションもちゃんと動く。(-persistは使えないようだ)

今のところは特に不具合もないようだけど、あくまで自己責任で。

[追記]

postscriptファイルの表示するにはghostscriptとgsviewが必要なのでインストールしておく。(gsviewのパスを通しておくとどこからでも開けるので便利)

Link:Ghostscript 8.63 + GSview 4.9 の日本語版

gsviewを起動すると毎度「Registration」が出てきて鬱陶しいので、ビューワにXnViewを使う手もある。

| | コメント (0) | トラックバック (1)

2008/10/10

NTEmacs + MinGW + MSYSでWindows上にC言語開発環境を構築してみる - その5

前回までの作業でC言語開発環境は整いましたが、実は問題があります。

その問題は次のようなコードを実行してみるとわかります。

#include <stdio.h>

int main(void)
{
  int num;
  
  printf("Please Input Num:");
  scanf("%d", &num);
  printf("Num:%d\n", num);
  
  return 0;
}

これをMSYSから実行しても次のようになってしまいます。

$ ./a.exe
100
Please Input Num:Num:100

scanf()の直前のprintf()で表示するはずの文字列が表示されません。これはMSYSで使っているrxvtの実装に問題があるためです。

この問題の対処法はrxvtを使用せず、Windows標準のコマンドプロンプトを使用するのが簡単です。具体的に「はC:\msys\1.0」内にある「msys.bat」の41行目の

if EXIST rxvt.exe goto startrxvt

をコメントアウトして

rem if EXIST rxvt.exe goto startrxvt

とすればMSYS起動時にrxvtが呼び出されなくなります。

| | コメント (0) | トラックバック (0)

2008/10/09

NTEmacs + MinGW + MSYSでWindows上にC言語開発環境を構築してみる - その4

1.動作確認

まずはデスクトップ上に作成されたMSYSのショートカットをダブルクリックしてMSYSを起動して次のようにコマンドを入力してください。

user@host ~
$ pwd
/c/Home

user@host ~
$ gcc
gcc.exe: no input files

user@host ~
$ make
make: *** No targets specified and no makefile found.  Stop.

user@host ~
$ gdb
GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i686-pc-mingw32".
(gdb) quit

user@host ~
$ 

gcc、make、gdbはこのようなメッセージが表示されればOKです。また、pwdコマンドの実行結果のとおりホームディレクトリは「C:\Home」になっています。MSYSのデフォルトのホームディレクトリはC:\msys\1.0\homeなのですが、環境変数HOMEが設定されているとHOMEで指定されているパスをホームディレクトリを認識します。

2.設定(お好みで)

MSYSを起動してみてわかると思いますが、MSYSのシェルは白地にグリーンとブルーのプロンプトで目がチカチカします。そこで色を変更してみます。

シェルの色を変更するには「C\msys\1.0」内にある「msys.bat」を編集します。

55行目にある
if "x%MINGW32BGCOLOR%" == "x" set MINGW32BGCOLOR=LightYellow
if "x%MINGW32FGCOLOR%" == "x" set MINGW32FGCOLOR=Navy
を次のようにコメントアウトしてこのような2行を追加
rem if "x%MINGW32BGCOLOR%" == "x" set MINGW32BGCOLOR=LightYellow
rem if "x%MINGW32FGCOLOR%" == "x" set MINGW32FGCOLOR=Navy
if "x%MINGW32BGCOLOR%" == "x" set MINGW32BGCOLOR=Black
if "x%MINGW32FGCOLOR%" == "x" set MINGW32FGCOLOR=White

また、Emacsの背景も黒にしたい場合はemacsコマンドに-rvオプションをつけて起動すればEmacsが黒基調になりますが、いつもオプションをつけるのは面倒なので'emacs -rv'を'emacs'と認識するようにエイリアスを登録しておきます。

エイリアスを登録するには「C:\msys\1.0\etc」内にある「profile」に

alias emacs='emacs -rv'

と追記しておく。(MSYSを再起動すると変更が反映される)

| | コメント (0) | トラックバック (0)

2008/10/08

NTEmacs + MinGW + MSYSでWindows上にC言語開発環境を構築してみる - その3

今度はMinGWとMSYSをインストール。

1.MinGWのインストール

まずはSourceForgeからMinGW-5.1.4.exeをダウンロードします。ダウンロードしたらインストーラを起動します。(このとき新しくフォルダを作って、その中でインストーラを起動したほうがいい)

インストール途中にインストールするコンパイラの選択画面が表示されるので欲しいインストーラを選択します。その後インストール先の指定画面が表示されますが、もしパスに空白が含まれているとトラブルの元なのでインストール先は「C:\MinGW」とします。

2.MSYSのインストール

SourceForgeからMSYS-1.0.10.exeをダウンロードしてきて、インストーラを起動します。(MinGWのインストーラと同じフォルダ内で起動する)

インストール先を聞かれたら「C:\msys\1.0」とします。

インストールが開始されてプログレスバーが100%になるとコマンドプロンプトが立ち上がり、いくつかの質問に答えることになります。

Q.1 Do you wish to continue with the post install? [yn ] ・・・ y

Q.2 Do you have MinGW installed? [yn ] ・・・ y

Q.3 Please answer the following in the from of c:/foo/bar.
       Where is your MinGW installation?
MinGWをインストールしたパスを入力します。このとき「\」ではなく「/」を使います。

このあと、もし「Makeがありません」といった内容のメッセージが表示されても問題ないので先に進んでください。

3.GDBのインストール

一応、デバッガをインストールしておきます。

SourceForgeからgdb-6.3-2.exeをダウンロードしてきてインストーラを起動します。インストール先はMinGWをインストールしたパスと同じに。「C:\MinGW」

4.環境変数の設定

PATHに、「C:\MinGW\bin;C:\msys\1.0\bin」を追加

また以下を新規作成

C_INCLUDE_PATH=C:\MinGW\include

CPLUS_INCLUDE_PATH=C:\MinGW\include

LIBRARY_PATH=C:\MinGW\lib

| | コメント (0) | トラックバック (0)

2008/10/07

NTEmacs + MinGW + MSYSでWindows上にC言語開発環境を構築してみる - その2

まずはNTEmacsのインストール。

1.NTEmacsのバイナリをダウンロードする。

NTEmacsはIMEを利用した日本語入力に難があるようなので、「NTEmacs JP Project」からIME patchが当てられたNTEmacsのバイナリをダウンロードします。(現在の最新版は22.2)

Link:NTEmacs JP Project - SourceForge.JP

2.インストール

ダウンロードしたバイナリを起動すると解凍する場所を聞いてくるので、「C:\」を指定します。(ハードディスクのルートならC:\でなくてもよい)

解凍が終わるとC:\emacsが作成されます。NTEmacsの実行ファイルは C:\emacs\22.2\bin内のrunemacs.exeです。

3.起動する前に

NTEmacsを起動する前にいくつか設定を済ませておきます。

まずはC:\に「Home」というフォルダを作成しておく。(今後、このフォルダがホームディレクトリになる)

次は環境変数PATHに、NTEmacsの実行ファイルが置かれているパス「C:\emacs\22.2\bin」を追加する(パスとパスはセミコロン「;」で区切る)。これでNTEmacsをどこからでも呼び出すことができるようになる。

さらに環境変数HOMEを作って、値には「C:\Home」を設定する。

4.NTEmacsを起動

とりあえずrunemacs.exeのショートカットをデスクトップに作成してNTEmacsを起動してみます。

Ntemacs_2 

設定ファイル「.emacs」はC:\Home内に作成します。.emacsを新規作成して

(setq inhibit-startup-message t)

と書いて保存し、NTEmacsを再起動すると先ほどの起動画面が表示されなくなることが確認できるはずです。

| | コメント (0) | トラックバック (0)

2008/10/06

NTEmacs + MinGW + MSYSでWindows上にC言語開発環境を構築してみる - その1

Windows上にC言語開発環境を構築する方法はいろいろあるが、比較的よく見かけるのは以下のようなものだろう。

  • Borland C++ CompilerもしくはVisual C++ Express Editionをインストールしてメモ帳等のエディタでコーディング
  • CygwinをインストールしてWindows上にUNIXライクな環境を構築する
  • Eclipse CDT + MinGW
  • coLinuxもしくはandLinuxを使う
  • VMware等の仮想PCソフトを使ってLinuxをエミュレート(Windows上ではないけど)

私はcoLinux/andLinux以外は全て試してみて現在はVMwareに落ち着いている。

しかし、この方法はLinuxディストリビューションをまるごと使いたいという目的のほうが強いので、単純にC言語開発環境を構築するという観点で見ると無駄が大きい。(しかもある程度のパフォーマンスを得るにはCPUやメモリ容量などの面で制約があるので一昔前のPCだと厳しい)

これはLinuxカーネルをWindows上で動作させるcoLinux/andLinuxにも言えることだと思う。

そこで今回は次のような方針で開発環境を構築する。

  • できるだけシンプルに
  • C言語入門レベルに統合開発環境はいらない
  • あまりマウスはつかいたくない
  • なるべくUNIXライク
  • Emacs使いたい

「Cygwinで全て解決」な感じもするが、CygwinもC言語開発環境としては十分大げさであることと、いつもCygwinではつまらないので、NTEmacs + MinGW + MSYSで構築してみる。(VistaでCygwin/Xが不安定であることも理由の一つ)

| | コメント (0) | トラックバック (0)