我正在尝试创建一个在MySQL中使用的UDF。我已经使用gcc编译了该函数,它可以正常工作。然后我将.so文件移动到我的插件目录中并输入MySQL服务器。我尝试使用以下代码创建函数:
CREATE FUNCTION mynew_udf RETURNS INT SONAME 'mynew_udf.so';
但是,服务器不是按原样创建功能,而是输出以下错误:
ERROR 1127(HY000):找不到符号 库中的'mynew_udf'
有没有人知道这个问题的解决方案或为什么会出现这个错误?谢谢。
答案 0 :(得分:4)
此错误的含义正是它所说的:在共享库中找不到mynew_udf
符号。
没有你的代码,我只能猜到为什么会这样。您的源代码是否具有看起来像这样的函数签名?
my_bool mynew_udf_init(UDF_INIT *, UDF_ARGS *args, char *message);
int mynew_udf(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
如第151行here所述:“这些必须是正确的,否则mysqld将找不到符号!”
如果您认为自己拥有正确的符号,也可以使用nm
查看mynew_udf.so
中的符号:
nm mynew_udf.so | grep mynew_udf
答案 1 :(得分:0)
使用此语法可以正常工作:
从开始文件夹:
gcc -shared -lstdc ++ -fPIC -DMYSQL_DYNAMIC_PLUGIN -I / usr / include / -I / usr / local / include / -I /opt/jasperserver-4.5.0-0/mysql/include/ -o nomefile.so nomefile.cc
cp nomefile.so / PATH / mysql / lib / plugin /
数据库连接字符串
/ PATH / mysql / bin / mysql -uroot -p test
MYSQL> CREATE AGGREGATE FUNCTION示例返回REAL SONAME 'udf_example.so';