2012年03月23日

MinGW/MSYSでリアルタイムなプロセス監視

リアルタイムなプロセス監視に便利なLinuxコマンドは top だが、MinGW/MSYSにはデフォルトではこのtopコマンドがインストールされない。

そんなときは、topをインストールするものよいけれど、以下のコマンド(というかシェル)を使えば、擬似的だがお手軽にリアルタイムなプロセス監視を実現できる。

$ while do
> ps aux
> sleep 3
> done


ちょっとしたことなのだけど、うっかり忘れやすいのでメモ。

【改訂新版】 Linuxコマンド ポケットリファレンス (Pocket Reference)
沓名 亮典 平山 智恵
技術評論社
売り上げランキング: 74889

PR:お買い物はAmazonで

posted by 寄り道退屈男 at 13:21 | Comment(0) | TrackBack(0) | MinGW

2012年03月22日

MinGWを入れたら.bashrc(シェルの設定)もカスタマイズ

前回MinGW/MSYSにminttyをインストールしたので、せっかくだからターミナル画面をもっと使いやすくすることに。
というわけで今回は .bashrc (bashシェルの設定ファイル)のカスタマイズである。

いうまでもなく、.bashrcは 自分のホームディレクトリ(~) にある。無ければ touch コマンドで新規作成するとよい。

今回.bashrcに設定したいのは以下の項目だ。

・viコマンドで自分がWindowsで使い慣れているエディタを開く設定
・llコマンドの定義(デフォだとllコマンドが定義されていない)
・ターミナル画面でUTF-8な文字を文字化けさせずに表示
・自分の開発用ディレクトリを$DEV_HOMEと定義

上記を設定ファイル .bashrc に記述すると以下となる。

.bashrc
# viコマンドで呼び出すエディタ
alias vi='/C/"Program Files (x86)"/HogeEditor/HogeEditor.exe'
# llコマンドを定義
alias ll='ls -l'
# ターミナル画面の文字コードを「UTF-8」に
export LANG=ja_JP.UTF-8
# 自分の開発用ディレクトリを「DEV_HOME」と命名
export DEV_HOME=/C/MinGW/msys/1.0/home/hogeuser/dev


これを保存し、以下のコマンドで設定を再読み込みすれば使えるはずである。

$ source /C/MinGW/msys/1.0/home/hogeuser/.bashrc


試しに設定ファイルに定義したllコマンドを打ってみて、正しく設定できているか確認するといいだろう。


入門bash 第3版
入門bash 第3版
posted with amazlet at 12.03.22
Cameron Newham Bill Rosenblatt
オライリージャパン
売り上げランキング: 288129


PR:お買い物はAmazonで

posted by 寄り道退屈男 at 08:10 | Comment(0) | TrackBack(0) | MinGW

2012年03月21日

MinGW/MSYS+gccでGUIアプリ開発環境を構築

Windows環境にMinGW/MSYSを入れて、Windows/Linux両方で実行できるGUIアプリを開発するための開発環境を構築してみた。

GUIライブラリとしてGTK+を使う場合と、WindowsAPIを使う場合の2パターンがあるので両方のサンプルソースを載せておく。どちらを選ぶかは、ライセンスと個々人の好みの問題だ。

というわけでまずは基礎的な環境構築から。


MinGW/MSYSをインストール


MinGWインストーラ(mingw-get-inst-20111118.exe (591.9 kB))をダウンロードして、インストール。

minimalist GNU というだけあってインストール自体はあっさり終わる。

インストールが完了したら、 C:/MinGW/msys/1.0/msys.bat でシェルが起動することを確認しておく。


ターミナルソフトminttyをインストール


デフォルトのターミナルソフトはコピペができないなど、何かと使いにくいので、mintty を別途インストールする。

インストール方法は、こんな感じ。

$ mingw-get update
$ mingw-get install msys-mintty


インストールが終わったら、 mintty と打ち込んで実行する。


GTK+をインストール


Windowアプリを作るためのライブラリ、GTK+をダウンロードしてインストールする。

gtk+-bundle_2.24.10-20120208_win32.zipをダウンロード&展開後、MinGW直下に丸ごとコピー。


GTK+を使ったサンプル


以下はGTK+を使ったシンプルなWindowプログラム。
※日本語も使いたいのでソースコードは必ず UTF-8 で保存すること。

hellogtk.c
#include <gtk/gtk.h>

static void cb_button(GtkWidget *widget, gpointer data) {
g_print("Hello A World\n");
}

int main(int argc, char *argv[]) {
GtkWidget *window;
GtkWidget *button;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "ハローワールド");
gtk_widget_set_size_request(window, 250, 80);
gtk_container_set_border_width(GTK_CONTAINER(window), 10);

button = gtk_button_new_with_label("ハローワールド");
gtk_container_add(GTK_CONTAINER(window), button);

g_signal_connect(G_OBJECT(window) ,
"destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(G_OBJECT(button) ,
"clicked", G_CALLBACK(cb_button), NULL);

gtk_widget_show_all(window);
gtk_main();

return 0;
}


Makefile
CC = gcc
PKG_CONFIG = /mingw/bin/pkg-config.exe

CFLAGS = -Wall -DGTK_DISABLE_DEPRECATED -mms-bitfields `$(PKG_CONFIG) --cflags gtk+-2.0`
LDFLAGS = -mno-cygwin `$(PKG_CONFIG) --libs gtk+-2.0` -Wl,--subsystem,windows

hellogtk.exe: hellogtk.o
$(CC) -o hellogtk.exe hellogtk.o $(LDFLAGS)

hellogtk.o: hellogtk.c
$(CC) $(CFLAGS) -c -o hellogtk.o hellogtk.c


which pkg-configコマンドでpkg-configがインストール済みであることを確認し、MakefileのPKG_CONFIGに正しくパスを設定すること。

上記のMakefileでコンパイルを実行。
$ make


コンパイルにより生成された hellogtk.exe はシェルから叩けば起動するはず。

しかし、このままではMinGW環境以外(つまりWindows環境)から起動しようとしても、「コンピューターに ○○.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみてください。」と怒られて、起動に失敗する筈である。作ったexeが依存ライブラリを読み込めていないからだ。

そんな時は、C:/MinGW/bin 配下にある必要なライブラリ(○○.dll)を全て hellogtk.exe と同じ階層(つまりパスの通った場所)へコピる必要がある。そうすればダブルクリックして実行(Windowsから実行)することができるようになる。

ちなみに今回のexeが依存したライブラリは以下の通りである。このようなシンプルなアプリであっても依存ライブラリがとても多いのがお分かりだろう。

c:/mingw/bin/freetype6.dll
c:/mingw/bin/intl.dll
c:/mingw/bin/libatk-1.0-0.dll
c:/mingw/bin/libcairo-2.dll
c:/mingw/bin/libexpat-1.dll
c:/mingw/bin/libfontconfig-1.dll
c:/mingw/bin/libgdk-win32-2.0-0.dll
c:/mingw/bin/libgdk_pixbuf-2.0-0.dll
c:/mingw/bin/libgio-2.0-0.dll
c:/mingw/bin/libglib-2.0-0.dll
c:/mingw/bin/libgmodule-2.0-0.dll
c:/mingw/bin/libgobject-2.0-0.dll
c:/mingw/bin/libgthread-2.0-0.dll
c:/mingw/bin/libgtk-win32-2.0-0.dll
c:/mingw/bin/libpango-1.0-0.dll
c:/mingw/bin/libpangocairo-1.0-0.dll
c:/mingw/bin/libpangoft2-1.0-0.dll
c:/mingw/bin/libpangowin32-1.0-0.dll
c:/mingw/bin/libpng14-14.dll
c:/mingw/bin/zlib1.dll


GTK+を使わない(WinAPIを呼び出す)場合のサンプル


GTK+を使わずにWinAPIだけを使ったWindowアプリのサンプルも掲載しておこう。こちらの方法であれば面倒なライブラリの依存関係に悩まされることもない。

ライブラリに依存しないことを確認するためだけのアプリなので、ボタンも何もないダイアログだけの超シンプルなWindowsアプリである。

hellowinapi.c
#include <windows.h> 

int WINAPI
WinMain (HINSTANCE hInstance, HINSTANCE hPrevInst, LPTSTR lpCmdLine, int nShowCmd)
{
MessageBoxW (NULL, L"ハローワールド!", L"ハロワ", MB_OK | MB_ICONINFORMATION);
return 0;
}


Makefile
CC = gcc
PKG_CONFIG = /mingw/bin/pkg-config.exe

CFLAGS = -Wall -DGTK_DISABLE_DEPRECATED -mms-bitfields `$(PKG_CONFIG) --cflags`
LDFLAGS = -mno-cygwin -Wl,--subsystem,windows

hellowinapi.exe: hellowinapi.o
$(CC) -o hellowinapi.exe hellowinapi.o $(LDFLAGS)

hellowinapi.o: hellowinapi.c
$(CC) $(CFLAGS) -c -o hellowinapi.o hellowinapi.c


後は上記をmakeして、生成されたhellowinapi.exeをダブルクリックで実行するだけ。特にこれといったライブラリがなくてもexeを単独で実行できることが分かるはずである。

posted by 寄り道退屈男 at 14:01 | Comment(0) | TrackBack(0) | MinGW