centos8下编译mysql lib_mysqludf_sys.so的问题及解决办法

lib_mysqludf_sys安装

下载地址:https://github.com/mysqludf/lib_mysqludf_sys

目录结构如下:

[root@MiWiFi-R1D-srv lib_mysqludf_sys-master]# ls
install.sh lib_mysqludf_sys.html lib_mysqludf_sys.sql
lib_mysqludf_sys.c lib_mysqludf_sys.so Makefile

编译源码

修改Makefile文件, 根据自身系统的MySQL环境而定

原Makefile

LIBDIR=/usr/lib

install:
    gcc -Wall -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o $(LIBDIR)/lib_mysqludf_sys.so

修改后Makefile:

LIBDIR=/usr/lib64/mysql/plugin

install:
    gcc -fPIC -Wall -I/usr/include/mysql/server -I/usr/include/mysql/server/private -I. -shared lib_mysqludf_sys.c -o $(LIBDIR)/lib_mysqludf_sys.so

去掉install.sh中mysql 密码:


mysql -u root -p < lib_mysqludf_sys.sql

运行install.sh。

lib_mysqludf_sys安装问题解决

1.mysql开发环境未准备充分,报错误“lib_mysqludf_sys.c:40:10: 致命错误:my_global.h:没有那个文件或目录。”。
解决办法:yum install mariadb-devel。
注意,不是安装mysql-devel,它也没有my_global.h,必须安装mariadb-devel。

2.务必在Makefile,gcc 后面加上 -fPIC ,否则会出现如下错误: /usr/bin/ld: /tmp/ccgYuWnQ.o: relocation R_X86_64_32 against `.rodata’ can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: 最后的链结失败: 输出不可表示的节 collect2: 错误:ld 返回 1。
3.务必在Makefile,gcc 后面加上或者修改为-I/usr/include/mysql/server -I/usr/include/mysql/server/private。只有这些目录才有编译所需要mysql文件。