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作成の勉強材料として試してみたい。