The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"проблема с библиотекой"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"проблема с библиотекой"  
Сообщение от SergSW email(ok) on 05-Мрт-09, 07:00 
Пытаюсь собрать библиотеку 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

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "проблема с библиотекой"  
Сообщение от SergSW email(ok) on 05-Мрт-09, 08:33 
Решил проблему
добавил
// raise_lib.h
#include <mysql.h>

extern "C"
{
my_bool raise_error_init(
UDF_INIT *initid
, UDF_ARGS *args
, char *message
);

long long raise_error(
UDF_INIT *initid
, UDF_ARGS *args
, char *is_null
, char *error
);
}

и изменил скрипт компиляции
gcc -Wall -fPIC -I/usr/include/mysql -c ./raise_lib.cpp -o ./linux/raise_lib.o -include ./raise_lib.h
gcc -lc -Wl,--export-dynamic -shared ./linux/raise_lib.o -O1 -o ./linux/raise_lib.so

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "проблема с библиотекой"  
Сообщение от vic (??) on 05-Мрт-09, 10:27 
Решите еще одну, соблюдаете соглашении о наименовании либы - приставка префикс lib, суффикс .so, т.е. libraise.so что позволит традиционным способом через -lraise ее подключать.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру