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。