есть простенькая 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 в статичные библиотеки
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.