MySQL udf创建中的错误1127

时间:2011-06-29 15:27:20

标签: mysql error-handling user-defined-functions

我正在尝试创建一个在MySQL中使用的UDF。我已经使用gcc编译了该函数,它可以正常工作。然后我将.so文件移动到我的插件目录中并输入MySQL服务器。我尝试使用以下代码创建函数:

CREATE FUNCTION mynew_udf RETURNS INT SONAME 'mynew_udf.so';

但是,服务器不是按原样创建功能,而是输出以下错误:

  

ERROR 1127(HY000):找不到符号   库中的'mynew_udf'

有没有人知道这个问题的解决方案或为什么会出现这个错误?谢谢。

2 个答案:

答案 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';