2011年2月22日

KyotoCabinet 1.2.45 が CentOS 5.5 x86_64 環境でビルドできない問題。

これ俺だけに起きてる現象だと思いたい。

CentOS 5.5 で KyotoCabinet を wget して configure && make すると、
下記のようなエラーでビルドできない現象が起こる。

kcplantdb.h:868: error: array bound is not an integer constant
kcplantdb.h: In constructor ‘kyotocabinet::PlantDB<BASEDB, DBTYPE>::Cursor::Cursor(kyotocabinet::PlantDB<BASEDB, DBTYPE>*)’:
kcplantdb.h:84: error: class ‘kyotocabinet::PlantDB<BASEDB, DBTYPE>::Cursor’ does not have any field named ‘stack_’
kcplantdb.h: In member function ‘void kyotocabinet::PlantDB<BASEDB, DBTYPE>::Cursor::clear_position()’:
kcplantdb.h:323: error: ‘stack_’ was not declared in this scope
kcplantdb.h: In member function ‘void kyotocabinet::PlantDB<BASEDB, DBTYPE>::Cursor::set_position(const char*, size_t, int64_t)’:
kcplantdb.h:335: error: ‘stack_’ was not declared in this scope
make: *** [kcplantdb.o] エラー 1

これが割と問題っていうか通らないんだから作れないって話でして。
んで、しょうがないのでパッチ作った。

https://gist.github.com/6be9dabc34cdb2bdbf09

原因はパッチの変更点を見てもらえれば分かると思うんですが、

class Cursor : public BasicDB::Cursor //! これより先に

static const size_t RECBUFSIZ = 64; //! これが宣言されてないと NG 食らう

という「えーそれ gcc が古いからじゃねーの」みたいなやつ。
ちなみに gcc --version するとこんな感じ。

gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48)

2008とか(笑)
これ 5.3 の頃から upgrade で 5.5 まで来たから、
どっかおかしくなったんじゃねーの‥‥?

【23日追記】
パッチ適用して srpm 作ったよ。
KyotoCabinet 1.2.45
KyotoTycoon 0.9.35
comments powered by Disqus