Я пытаюсь написать свой собственный механизм хранения 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, мой механизм хранения связывается с той же версией libstdc ++, что и другие механизмы, поставляемые с mysql, которые могут быть загружены без проблем.
Есть ли уловки в том, как выяснить, откуда возникла эта проблема?
РЕДАКТИРОВАТЬ : символ, который не может быть найден, является
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. Как это может произойти?