2011-08-09 3 views
0

バックエンドとしてキーバリューストアを使用する独自のMySQLストレージエンジンを作成しようとしています。カスタムのmysqlプラグインをロードしようとすると、未定義の参照 - デバッグ方法?

私は今、必須部分を実装した最初のバージョンを書いて、MySQLソースインスタンスをコンパイル、リンク、インストールすることができました。そうした後、私はmysqlのコンソールで次のコマンドを使用して、私の新しいプラグインをロードしよう:

install plugin ramcloud soname 'ha_ramcloud.so'; 

私が得るエラーは以下の通りです:

ERROR 1126 (HY000): Can't open shared library '/usr/local/mysql/lib/plugin/ha_ramcloud.so' (errno: 13 undefined symbol: _ZNSt8_Rb_treeImmSt9_IdentityImESt4lessImESaImEE8_M_eraseEPSt13_Rb_tree_nodeImE) 

今、私はこれをデバッグする方法が分かりません問題。キー値ストアのクライアントライブラリは、-std = C++ 0xコンパイラフラグを使用しており、これが問題の一部である可能性があると考え始めました。しかし、lddでチェックすると、私のストレージエンジンはmysqlと一緒に提供されている他のエンジンと同じlibstdC++バージョンにリンクします。これは問題なくロードできます。

この問題の原因を特定する方法はありますか?

EDIT:見つからません記号は、これはのlibstdC++(STL)から何かのように見えるとstdの私の使用::設定から、おそらくある

std::_Rb_tree<unsigned long, unsigned long, std::_Identity<unsigned long>, std::less<unsigned long>, std::allocator<unsigned long> >::_M_erase(std::_Rb_tree_node<unsigned long>*) 

です。これはどうしたらできますか?

答えて

1

これは愚かなエラーでした.MySQLビルドシステムは-fno-implicit-templatesオプションを使用します。このプラグインを削除すると問題が解決しました(私は明示的なインスタンスを作成することもできますが、プロトタイプのみをプログラムするのでこれは問題ありません)。