Пытаюсь собрать библиотеку UDF под MySQL на Linux, столкнулся со следующей проблемой//-----raise_lib.cpp
#if (defined(_WIN32) || defined(__WIN32__))
#include <winsock.h>
#else
#include <iostream>
#include <stdlib.h>
#endif
#include <mysql.h>
#include <string.h>
my_bool raise_error_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
{
unsigned int argStringLength;
if(args->arg_count==1 && args->arg_type[0]==STRING_RESULT)
{
argStringLength = strlen(args->args[0]) + 1;
memcpy( message
, args->args[0]
, argStringLength>MYSQL_ERRMSG_SIZE ? MYSQL_ERRMSG_SIZE : argStringLength );
} else {
memcpy( message
, "Unspecified error raised"
, 25 );
}
return 1;
}
long long raise_error( UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error )
{
return 0;
}
собираю так:
gcc -Wall -fPIC -I/usr/include/mysql -c ./raise_lib.cpp -o ./linux/raise_lib.o
gcc -lc -Wl,--export-dynamic -shared ./linux/raise_lib.o -O1 -o ./linux/raise_lib.so
Компилируется без ошибок библиотека создаётся, НО при попытке использовать библиотеку не находит функцию raise_error
eu-nm ./raise_lib.so
Symbols from ./raise_lib.so:
Name Value Class Type Size Line Section
...
_Z11raise_errorP11st_udf_initP11st_udf_argsPcS3_ |000005dc|GLOBAL|FUNC | f| |.text
_Z16raise_error_initP11st_udf_initP11st_udf_argsPc|00000660|GLOBAL|FUNC | 9c| |.text
т.е. имена процедур искаверкались как это лечить?
ОС: Debian 5.0
Compiler: gcc 4.3.3