Ошибка 1127 в создании MySQL udf - PullRequest
3 голосов
/ 29 июня 2011

Я пытаюсь создать UDF для использования в MySQL.Я скомпилировал функцию, используя gcc, и она работает правильно.Затем я переместил файл .so в каталог плагинов и вошел на сервер MySQL.Я попытался создать функцию, используя следующий код:

CREATE FUNCTION mynew_udf RETURNS INT SONAME 'mynew_udf.so';

Однако вместо того, чтобы создать функцию, как следует, сервер выдает следующую ошибку:

ОШИБКА 1127 (HY000): не удается найти символ «mynew_udf» в библиотеке

Кто-нибудь знает решение этой проблемы или почему может возникнуть эта ошибка?Спасибо.

Ответы [ 2 ]

4 голосов
/ 29 июня 2011

Эта ошибка в точности означает, что она говорит: символ mynew_udf не может быть найден в общей библиотеке.

Без вашего кода я могу только догадываться, почему это так. Ваш исходный код имеет сигнатуры функций, которые выглядят следующим образом?

my_bool mynew_udf_init(UDF_INIT *, UDF_ARGS *args, char *message);  
int mynew_udf(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);

Как отмечено в строке 151 здесь : "Это должно быть правильно, или mysqld не найдет символ!"

Если вы считаете, что у вас правильные символы, вы также можете использовать nm для просмотра символов в mynew_udf.so:

nm mynew_udf.so | grep mynew_udf
0 голосов
/ 18 ноября 2013

С этим синтаксисом отлично работает:

Из начальной папки:

gcc -shared -lstdc ++ -fPIC -DMYSQL_DYNAMIC_PLUGIN -I / usr / include / -I / usr / local / include / -I /opt/jasperserver-4.5.0-0/mysql/include/ -o nomefile.so nomefile.cc

cp nomefile.so / PATH / mysql / lib / plugin /

Строка подключения к БД

/ PATH / mysql / bin / mysql -uroot -p test

MYSQL> Пример CREATE AGGREGATE FUNCTION ВОЗВРАЩАЕТ РЕАЛЬНОЕ SONAME 'Udf_example.so';

...