CentOS 5.5 MariaDB 5.1.49にUDF base64_encodeを入れてみるその2

 前回はbase64_encodeしか入れられなかったので、別のbase64のUDFのインストールを試みる。前回はgccのライブラリを使うものだったが、今回はphpのソースからの移植のようだ。

cd /usr/local/src
wget http://bugs.mysql.com/file.php?id=3294 -O base64.c 
gcc -Wall -I/usr/local/include -shared base64.c -o base64.so
install -m 755 base64.so /usr/local/mariadb/lib/mysql/plugin
CREATE FUNCTION base64encode RETURNS STRING SONAME 'base64.so';
CREATE FUNCTION base64decode RETURNS STRING SONAME 'base64.so';

エラー修正

  • 付属のドキュメントが間違っていたため適切なオプションに修正
gcc -Wall -I/usr/local/include -shared -o base64.so -c base64.c
↓
gcc -Wall -I/usr/local/include -shared base64.c -o base64.so

シェアードライブラリではなく実行形式になっていたのが原因

file base64.so
base64.so: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
  • シェアードライブラリではないので以下のエラーが出る。
mysql> CREATE FUNCTION base64decode RETURNS STRING SONAME 'base64.so';
ERROR 1126 (HY000): Can't open shared library 'base64.so' (errno: 22 /usr/local/mariadb/lib/mysql/plugin/base64.so: only ET_DYN and ET_EXEC can be loaded)

phpの関数を移植するというアイディアは面白い。同様にpostgresからの移植も簡単そうだ。MySQLのUDF作成の勉強材料として試してみたい。