0

Key-Valueストアをバックエンドとして使用する独自の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)

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

この問題がどこから来ているのかを理解する方法に何かトリックはありますか?

編集:見つからないシンボルは

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>*)

これはlibstdc++(STL)からのもののように見え、おそらくstd::setの使用によるものです。これはどのように起こりますか?

4

1 に答える 1

1

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

于 2011-08-09T08:17:46.340 に答える