UDF MySQL Linux + QT SDK ( Can't open shared library.... undefined symbol...)

программирование Linux MySQL qt udf

есть простенькая UDF для расширения mysql:
/* STANDARD is defined, don't use any mysql functions */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>


typedef unsigned long long ulonglong;
typedef long long longlong;


#include <my_global.h>
#include <my_sys.h>
#if defined(MYSQL_SERVER)
#include <m_string.h> /* To get strmov() */
#else
/* when compiled as standalone */
#include <string.h>


#endif
#include <mysql.h>
#include <ctype.h>
#include <QtCore/QTime>
#ifdef HAVE_DLOPEN

extern "C" longlong myudf(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);
extern "C" my_bool myudf_init(UDF_INIT *initid,UDF_ARGS *args,char *message);
extern "C" void myudf_deinit(UDF_INIT *initid);




longlong myudf(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
{
int tm;
QTime *time = new QTime();
time->setHMS(0,0,0,0);
tm = time->msecsTo(QTime::currentTime())/10;
return tm;
}

my_bool myudf_init(UDF_INIT *initid,UDF_ARGS *args,char *message)
{
if (args->arg_count != 0)
{
strcpy(message,"Function call has wrong arguments. Use func_name()");
return 1;
}
return 0;
}

void myudf_deinit(UDF_INIT *initid)
{

}

#endif /* HAVE_DLOPEN */


компилирую g++
# g++ -fPIC -L/home/opt/qtsdk-2010.05/qt/lib/ -I/usr/include/mysql -I/home/opt/qtsdk-2010.05/qt/include -c udf.c
# g++ -shared -o /usr/lib/mysql/libudf.so udf.o
Ошибок нет.

вызываю функцию в mysql:
mysql> CREATE FUNCTION myudf RETURNS INTEGER SONAME 'libudf.so';root
ERROR 1126 (HY000): Can't open shared library 'libudf.so' (errno: 22 /usr/lib/mysql/libudf.so: undefined symbol: _ZNK5QTime7msecsToERKS_)


Примечание:
to Майоров Павел, разумеется я знаю, что не видит библиотеку, и знаю как она называется (libQtCore.so) но на данный момент видно причина в том, что компилировал без подключения статичной библиотеки. Сейчас вожусь с компиляцией QT в статичные библиотеки
Ответы:
Возможно версия MySQL не поддерживается той версией SDK которую вы используете для своей библиотеки. Посмотрите в документации к SDK возможно там есть указания касательно версии используемого ПО.
Написано же: не могу открыть библиотеку 'libudf.so' (эта та самая, которую вы компилировали), потому что не могу найти символ (т.е. функцию) _ZNK5QTime7msecsToERKS_ (то бишь QTime7msecsToЧТОТОТАМ). Иными словами, не хватает библиотеки qtime (возможно, она называется libqt.so или libqtime.so, но не факт)


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.