gpt4 book ai didi

c++ - 尝试加载自定义 mysql 插件时 undefined reference - 如何调试?

转载 作者:行者123 更新时间:2023-11-28 08:17:55 26 4
gpt4 key购买 nike

我正在尝试编写自己的 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) 的东西,可能来 self 对 std::set 的使用。怎么会这样?

最佳答案

这是一个愚蠢的错误:MySQL 构建系统使用了 -fno-implicit-templates 选项。为我的插件删除它解决了这个问题(我也可以创建一个显式实例,但由于我只编写了一个原型(prototype),所以这应该没问题)。

关于c++ - 尝试加载自定义 mysql 插件时 undefined reference - 如何调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6992768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com