MariaDB 15.1加载sys_exec插件报错:wrong ELF class: ELFCLASS32
解决MariaDB加载lib_mysqludf_sys.so时的ELFCLASS32错误
这个错误的核心原因很明确:你当前使用的是64位的x86_64系统和MariaDB,但放入插件目录的lib_mysqludf_sys.so是32位版本的,两者架构不兼容,导致加载失败。下面是具体的修复步骤:
1. 确认系统和MariaDB的位数
先验证你的环境确实是64位架构:
- 检查系统架构:
输出应为uname -mx86_64,说明是64位系统。 - 检查MariaDB的位数:
输出内容中会包含file $(which mysqld)x86-64字样,确认MariaDB是64位版本。
2. 替换为64位版本的lib_mysqludf_sys.so
你需要重新编译生成适配64位环境的共享库:
- 先删除现有的32位库文件:
rm /usr/lib/x86_64-linux-gnu/mariadb18/plugin/lib_mysqludf_sys.so - 安装编译依赖:针对你的MariaDB 15.1版本,安装对应的MariaDB开发包(以Debian/Ubuntu系统为例):
如果找不到通用包,可以尝试指定对应分支的版本,比如sudo apt-get install mariadb-server-devmariadb-server-dev-10.11(MariaDB 15.1通常对应10.11分支)。 - 获取lib_mysqludf_sys的源码包并解压到本地目录。
- 进入源码目录,编译生成64位共享库:
这里gcc -fPIC -Wall $(mysql_config --include) -shared lib_mysqludf_sys.c -o lib_mysqludf_sys.so$(mysql_config --include)会自动获取MariaDB头文件的正确路径,避免手动指定出错。 - 将编译好的64位库复制到插件目录:
sudo cp lib_mysqludf_sys.so /usr/lib/x86_64-linux-gnu/mariadb18/plugin/ - 调整文件权限,确保MariaDB进程能正常读取:
sudo chmod 755 /usr/lib/x86_64-linux-gnu/mariadb18/plugin/lib_mysqludf_sys.so sudo chown mysql:mysql /usr/lib/x86_64-linux-gnu/mariadb18/plugin/lib_mysqludf_sys.so
3. 重新创建函数
回到MariaDB命令行,重新执行创建函数的命令:
create function sys_exec returns int soname 'lib_mysqludf_sys.so';
这次应该能成功加载插件了。
额外注意点
- 如果你不确定MariaDB的插件目录是否正确,可以在MariaDB中执行以下命令查看:
确保你把库文件放到了输出显示的目录中。show variables like 'plugin_dir'; - 编译过程中如果遇到头文件找不到的错误,检查
mysql_config是否存在(执行which mysql_config),如果不存在,说明MariaDB开发包未正确安装。
内容的提问来源于stack exchange,提问作者Oracy Martos
相关产品推荐
相关产品推荐

