【问题标题】:Error 1127 in MySQL udf creationMySQL udf 创建中的错误 1127
【发布时间】:2011-09-25 06:35:54
【问题描述】:

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

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

但是,服务器没有按应有的方式创建函数,而是输出以下错误:

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

有谁知道这个问题的解决方案或为什么会发生这个错误?谢谢。

【问题讨论】:

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


    【解决方案1】:

    这个错误的意思正是它所说的:在共享库中找不到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
    

    【讨论】:

    • 非常感谢您的帮助,我正在使用从另一个函数中复制的一些代码,忘记用它更改函数名称。
    • 如果nm mynew_udf.so | grep mynew_udf产生了预期的结果,但是MySQL仍然抱怨找不到呢?
    • 没关系,找到我自己的答案...出于某种奇怪的原因重新启动 mysql 解决了问题。
    【解决方案2】:

    使用此语法可以正常工作:

    从开始文件夹:

    gcc -shared -lstdc++ -fPIC -DMYSQL_DYNAMIC_PLUGIN -I /usr/include/ -I /usr/local/include/ -I /opt/jasperserver-4.5.0-0/mysql/include/ -o 名称文件.so 名称文件.cc

    cp nomefile.so /PATH/mysql/lib/plugin/

    数据库连接字符串

    /PATH/mysql/bin/mysql -uroot -p 测试

    MYSQL> CREATE AGGREGATE FUNCTION 示例 RETURNS REAL SONAME 'udf_example.so';

    【讨论】:

      猜你喜欢
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 2015-04-22
      • 1970-01-01
      • 2013-12-15
      • 1970-01-01
      相关资源
      最近更新 更多