неопределенная ссылка при попытке загрузить пользовательский плагин mysql - как отладить? - PullRequest
0 голосов
/ 09 августа 2011

Я пытаюсь написать свой собственный механизм хранения 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. Как это может произойти?

1 Ответ

1 голос
/ 09 августа 2011

Это была глупая ошибка: система сборки MySQL использует опцию -fno-implicit-templates.Удаление этого для моего плагина решило проблему (я мог также сделать явный экземпляр, но так как я программирую только прототип, это должно быть в порядке).

...