BugTrack-R備忘録/25
【Rserve】C++のクライアントを使ってみる
- 投稿者: みゅ
- カテゴリ: なし
- 優先度: 普通
- 状態: 完了
- 日時: 2009年02月20日 09時17分32秒
内容
RserveのC++のクライアントを使ってみる
インストール?
- 「Rserve_0.6-0.tar.gz」をダウンロードしてくる.(ダウンロードサイト)
- 解凍
tar xvf Rserve_0.6-0.tar.gz
- 「Rserve」というフォルダが出来るので、入る
cd Rserve
- RserveのインストールではなくC++クライアントのインストールなので、クライアントのソースがある、フォルダまで移動する
$ cd clients/cxx $ ls COPYING Rconnection.h config.h.in demo1 do_RMeCab.o Makefile Rconnection.o config.log demo1.cc rcmd.cc Makefile.in ReadMe.txt config.status demo1.o rcons.cc Makefile.win Rsrv.h configure do_RMeCab rsdown.cc Rconnection.cc config.h configure.ac do_RMeCab.cc sisocks.h
- (do_RMeCabは、みゅが作成したファイル)
- コンフィギュア.普通に「./configure」とやったような気がする.
./configure
- makeする.でもみゅの環境ではコンフィグで作成された「Makefile」がうまく動かない.
- 最新の?gnu makeでは暗黙のルールというのがあって、
%: %.cc | $(LINK.cc) $^ $(LOADLIBES) $(LDLIBS) -o $@ |
---|
と定義されているらしい.暗黙の定義を見る場合、以下のコマンドで確認できるらしい
make --print-data-base -n (-n はmakeを実行せずにどういうコマンドが実行されるかを見るだけ)
- 今回は「demo1」を作りたいので、以下を実行したい.でも暗黙のルールのせいで???、うまくいかない.
make demo1 (どういうコマンドが実行されるかを見るだけなら「make -n demo1」)
- ちなみに「make -n demo1」を実行すると
$ make -n demo1 g++ -DHAVE_CONFIG_H demo1.cc -o demo1
- 暗黙のルールが余計なことをしているらしい.でこの「%: %.cc」という暗黙のルールを無効にしたい.Makefileに以下を追加するだけ.
%: %.cc
- これで以下のようになる
$ make -n demo1 g++ -DHAVE_CONFIG_H -c -o Rconnection.o Rconnection.cc g++ -DHAVE_CONFIG_H -c -o demo1.o demo1.cc g++ Rconnection.o demo1.o -o demo1 -ldl -lcrypt
- 実際にmake.「-n」を取るだけ.
$ make demo1
- みゅの環境では、demo1が作成された.
実行
- demo1は何も編集しなければ、ローカルのRserveに接続にいくので35行目当たりにある、
Rconnection *rc = new Rconnection();
- を編集する.
Rconnection *rc = new Rconnection("192.168.100.zzz");
- 等、Rserveが動いているサーバーのIPアドレスを書く.それでmake.
make demo1
- 実行
$ ./demo1 Rdouble[4] 2 by 2 matrix 33.97 -2.1 -2.1 10.09 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 3.7 3.4 3 3 4 4.4 3.9 3.5 3.8 3.8 3.4 3.7 3.6 3.3 3.4 3 3.4 3.5 3.4 3.2 3.1 3.4 4.1 4.2 3.1 3.2 3.5 3.6 3 3.4 3.5 2.3 3.2 3.5 3.8 3 3.8 3.2 3.7 3.3 3.2 3.2 3.1 2.3 2.8 2.8 3.3 2.4 2.9 2.7 2 3 2.2 2.9 2. 9 3.1 3 2.7 2.2 2.5 3.2 2.8 2.5 2.8 2.9 3 2.8 3 2.9 2.6 2.4 2.4 2.7 2.7 3 3.4 3. 1 2.3 3 2.5 2.6 3 2.6 2.3 2.7 3 2.9 2.9 2.5 2.8 3.3 2.7 3 2.9 3 3 2.5 2.9 2.5 3. 6 3.2 2.7 3 2.5 2.8 3.2 3 3.8 2.6 2.2 3.2 2.8 2.8 2.7 3.3 3.2 2.8 3 2.8 3 2.8 3. 8 2.8 2.8 2.6 3 3.4 3.1 3 3.1 3.1 3.1 2.7 3.2 3.3 3 2.5 3 3.4 3
- ちなみに今のクライアントではサーバーをIPアドレスでしか、指定できない.なんという不便さ!!
- サーバーの名前で指定できるように「Rconnection.cc」を修正してみる.
- 65行目
#ifndef AF_LOCAL #define AF_LOCAL AF_UNIX #endif (この下あたりに以下をインクルード) #include <netdb.h>
- 590行目あたり、connect関数に以下を追加
int Rconnection::connect() { //Add >>> struct hostent *hostent1; struct in_addr ina1; char *host1; hostent1 = gethostbyname(host); ina1.s_addr = **(unsigned int **)(hostent1->h_addr_list); host1 = strdup(inet_ntoa(ina1)); //<<<Add
- 以下「host」という名前の変数が出てきているところを「host1」に変更する.2箇所.
build_sin(&sai,host1,port);
strcpy(sau.sun_path,host1); // FIXME: possible overflow!
- 「host1」変数はこのあともう使わないので、deleteする.適当なところで
free(host1);
- これで以下のように書いて、動いた.みゅの環境では成功.
Rconnection *rc = new Rconnection("サーバーの名前");
R備忘録 /状態空間モデリング/donlp2/その他のメモ