Cygwin環境にmemcachedをインストールしてみた

読了まで:約3分


概要: Cygwin で memcached をコンパイルしてインストールする


個人的に作ってるライブラリ群(Applishことです。詳しくは 僕のリポジトリ参照 ) のキャッシュクラスで、 memcached使ったクラスを作ってて、 実際に動かしてテストしてみたかったんで、Cygwin に memcached をインストールしてみました。

今回はすんなりいくかと思いきや、ソースコードにパッチを当てる必要があったので、 そこら辺もまとめて掲載してみる。

1. ソースコードの取得

$ cd ~/tmp
$ wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz

2. libeventインストール

memcached の動作には libevent必要なので、 先にlibeventインストールします。

こっちは割りとすんなりいって、

$ wget http://monkey.org/~provos/libevent-1.4.14b-stable.tar.gz
$ tar zxvf libevent-1.4.14b-stable.tar.gz
$ cd libevent-1.4.14b-stable
$ ./configure --prefix=/usr/local/libevent
$ make
$ make install

インストールが終了しました。で、あと./configureオプションについては各自で調整してください。

3. memcachedソースコード修正

で、次にmemcachedソースコード修正に行きます。

まず、最初がutil.cで、memcachedの生のコードだと、 Cygwin と Solaris で問題が発生するみたいです。詳しくは Issue 111: compile errors: array subscript has type 'char'参照。

で、この問題については、先のリンク先で、個人的に修正していた人がいたので、 そこからパクってきます。正確には、

  • <http://github.com/lindner/memcached/ http://github.com/lindner/memcached/>

リポジトリのutil.cで、memcachedutil.c上書きすれば OK です。

で、今度はtestapp.c修正をします。

testapp.cついてなんですが、このファイルはコンパイル時に、

testapp.c: In function 'cache_redzone_test':
testapp.c:125: error: unknown field 'sa_handler' specified in initializer
cc1: warnings being treated as errors

みたいなエラーを吐きます。

このエラーメッセージのunknown field 'sa_handler' specified in initializer Google 検索したら一発で出てくるんですが、どうもこのエラーは、Cygwin のヘッダファイルの都合上おきるそうです。

まあ僕は詳しいことは分からないんで詳細は Designated Initializer - BOOLEANLABEL参照してください。

リンク先で、

sahandler がさらに内部で union のメンバになっているからというオチである。ちなみに普通にメンバに代入するように書くと、コンパイルできるのは何故なのだろうか? *1code: #include <signal.h> void func(void) struct sigaction action; action.sa_handler = SIG_IGN; action.sa_flags = 0;

述べられているように、問題の箇所を上記のように書き換えれば、 コンパイルは可能になるようです。

で、testapp.c問題の箇所は line 125 の、

code:_ struct sigaction action = .sa_handler = SIG_IGN, .sa_flags = 0;

なっているところを、

struct sigaction action;
action.sa_handler  = SIG_IGN;
action.sa_flags    = 0;

書き換えれば OK です。

4. memcachedコンパイル

これでmemcachedソースの修正は終わったので、あとは端末で、

$ cd ~/tmp/memcached-1.4.5
$ ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
$ make
$ make test
$ make install

すれば Cygwin にmemcachedインストールできます。

ちなみに僕は memcached の動作確認をするのにmake testしかやってないので、 本番環境で本当に動くかどうかは確認できていません。

まあmake testテストがこけるようなことはなかったので、多分大丈夫でしょう。

いうわけで以上でmemcachedインストールは終わりです。

5. 以上終了。以下感想

まあ今回memcached実際にインストールしてみたわけですが、 詰まった箇所が自分でなんとかできる範囲だったのが幸いでした。 これでわけの分からんエラーとか、ソースを大幅に書き換えないとダメな箇所とか出てきたら、 多分お手上げだったでしょう。これでmemcached手に入ったので、あとはmemcached使うテストを書くだけです。

いうわけで、今日は Cygwin にmemcachedインストールしてみたというお話でした。

#FIXME

アバターアイコン兼ロゴ

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。次に備えて待機中。

今は趣味でプログラミングをして生活しています。