我正在尝试编写自己的 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++ 版本,这些引擎可以毫无问题地加载。
如何找出这个问题来自哪里有什么技巧吗?
编辑:找不到的符号是
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 的使用。这怎么可能发生?