You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译MySQL UDF时GCC无法链接RHash的问题求助

解决MySQL UDF加载sha3.so时报undefined symbol: rhash_msg的问题

我之前也踩过这个一模一样的坑!这个错误本质是你的sha3.so没有正确链接到RHash的库文件,导致MySQL加载时找不到rhash_msg这个核心符号。下面是我亲测有效的解决步骤:

1. 确保RHash正确安装并被系统识别

首先得确认你编译安装的RHash已经被系统库缓存收录:

  • 重新编译RHash源码时,执行配置命令要同时启用静态和动态库:
    ./configure --enable-static --enable-shared
    make && sudo make install
    
  • 安装完成后必须执行sudo ldconfig,更新系统的共享库缓存,这样后续编译UDF时才能找到RHash的库。

2. 编译UDF时显式链接RHash库

这是最关键的一步!很多人编译UDF时只加了MySQL的头文件,却忘了链接RHash的库:
假设你的UDF源码文件是sha3_udf.c,编译命令要加上-lrhash参数:

# 第一步:编译成目标文件
gcc -fPIC -Wall -I$(mysql_config --include) -c sha3_udf.c
# 第二步:生成共享库,重点是-lrhash
gcc -shared -o sha3.so sha3_udf.o -lrhash

如果RHash安装在非默认路径(比如/usr/local/lib),还要加上-L参数指定库路径:

gcc -shared -o sha3.so sha3_udf.o -L/usr/local/lib -lrhash

3. 验证共享库的依赖是否正确

编译完成后,用ldd命令检查sha3.so的依赖:

ldd sha3.so

如果输出里能看到librhash.so的条目,说明链接成功了;如果看不到,就得回头检查RHash的安装路径和编译参数。

4. 重新部署UDF并测试

  • 把编译好的sha3.so复制到MySQL插件目录(你的路径是/usr/lib/mysql/plugin/),注意权限要设置正确:
    sudo cp sha3.so /usr/lib/mysql/plugin/
    sudo chown mysql:mysql /usr/lib/mysql/plugin/sha3.so
    
  • 登录MySQL,重新创建UDF函数(如果之前创建过要先DROP):
    DROP FUNCTION IF EXISTS sha3;
    CREATE FUNCTION sha3 RETURNS STRING SONAME 'sha3.so';
    
  • 测试一下函数是否能正常调用,比如:
    SELECT sha3('test');
    

额外注意点

  • 确保你的编译环境和MySQL的架构一致(比如都是64位),否则会出现加载失败的情况;
  • 如果之前编译过旧版本的sha3.so,一定要彻底替换掉旧文件,最好重启一下MySQL服务再测试。

内容的提问来源于stack exchange,提问作者Brian Leishman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:27:32