Pluggable Storage Engineでは-fno-rttiをつける

いまSkeleton Engineみたいなのを0から独自に作っているのですが、嵌ったのでメモ。

C++にはRTTI(Run Time Type Information、実行時型情報)という便利な機能があるそうなのですが、これを有効(G++ではデフォルト)にしたままビルドすると、Pluggable Storage Engineの場合には問題がでます。

INSTALL PLUGINの時にこんなメッセージが出る。

[test]> install plugin yase soname 'ha_yase.so';
ERROR 1126 (HY000): Can't open shared library '/usr/local/mysql-5.1.25-rc/lib/mysql/plugin/ha_yase.so' 
(errno: 22 undefined symbol: _ZTI7handler)

よく分からないけどnmすると、handlerが2つ定義されてる。

mir@mir31:/usr/local/mysql/lib/mysql/plugin$ nm ha_yase.so | grep handler
〜中略〜
00003a00 W _ZNK7handler27max_supported_record_lengthEv
00003a40 W _ZNK7handler29max_supported_key_part_lengthEv
00003a70 W _ZNK7handler8checksumEv
         U _ZTI7handler
         U _ZTV7handler

これはCXXFLAGSに-fno-rttiをつけることで回避可能。configure.acとかconfigure.inに書いておけばOK。