Не загружаются UDF на FB 2 RC1 Superserver - Fedora Core 5

Совместимость InterBase, Firebird, Yaffil между собой и по версиям

Модераторы: kdv, Alexey Kovyazin

Ответить
Владимир Кузнецов
Сообщения: 9
Зарегистрирован: 16 апр 2006, 17:42

Не загружаются UDF на FB 2 RC1 Superserver - Fedora Core 5

Сообщение Владимир Кузнецов » 16 апр 2006, 18:50

Здравствуйте все!

Проблема:
Не загружаются мои самописные UDF на FB 2 RC1 Superserver - Fedora Core 5.

Звучит, конечно, по-ламерски, но подождите...
Итак, есть база данных и библиотека UDF для этой базы (~5 функций)
Всё работает замечательно под FB 1.5 SS Linux (Slackware).
Решил попробывать FB2 и заодно Fedora 5.
Поставил FB2 (если бы не коференция на google, умучался бы искать пакет с libstdc++.so.5 без которого FB2 не работает), перекопировал myudf.so.
Не компилируются SP т.к. "не найденны точки входа или библиотеки" для моих UDF (а где обещанное улучшение диагностики ошибок?).
Перекомпилирую myudf.cpp - "не найденны точки входа или библиотеки". Ладно, думаю, проблема в разных версиях libstdc++.
Посколько используемые функции - чистый C, выкидываю всё лишнее, делаю myudf.c, компилирую - таже ошибка.
Проверяю поставляемые в комлекте UDF - всё работает!
Пишу тестовую UDF из одной функции - работатет!
Оставляю одну ф-цию в myudf.c - работает!
Две - работатет.
Три - не работает НИ ОДНА UDF из всей библиотеки!
Причём всё с той-же ошибкой - "не найденны точки входа или библиотеки".
Здраво рассуждая - так не бывает.
У кого есть идеи?
Могу выслать myudf.c/myudf.so.

К разработчикам:
Нельзя ли сделать расширенную диагностику при ошибках UDF?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 17 апр 2006, 08:19

Возможно, твоя библиотека использует какие-то другие библиотеки которые как раз и не найдены. Типичный пример: rfunc требует libgds, которого у FB2 нет.
Расширить диагностику... Это вряд ли. ОС на dload() дает не так уж много кодов ошибок.

Владимир Кузнецов
Сообщения: 9
Зарегистрирован: 16 апр 2006, 17:42

Сообщение Владимир Кузнецов » 17 апр 2006, 12:41

Dimitry Sibiryakov писал(а):Возможно, твоя библиотека использует какие-то другие библиотеки которые как раз и не найдены. Типичный пример: rfunc требует libgds, которого у FB2 нет.
Нет там вообще никаких библиотек :)
Всё до неприличия элементарно.

Может Вы попробуете?

http://www.imajet.net/bad_udf/bad_udf.tar.gz

Вот это не работает. Убираю последнюю функцию - работает.

v6y
Сообщения: 78
Зарегистрирован: 12 мар 2005, 17:45

Сообщение v6y » 17 апр 2006, 16:18

Dimitry Sibiryakov писал(а): Расширить диагностику... Это вряд ли. ОС на dload() дает не так уж много кодов ошибок.
Для Линукса используется

Код: Выделить всё

void *dlopen(const char *filename, int flag);
В случае неудачной загрузки данная функция вернет NULL и используя функцию char *dlerror(void ) можно узнать много интересного :). Например сообщение
Error: myudf.so: undefined symbol: ib_util_malloc
было бы гораздо более информативно чем
module name or entrypoint could be found
Но это так, мысли в слух

Владимир Кузнецов
Сообщения: 9
Зарегистрирован: 16 апр 2006, 17:42

Сообщение Владимир Кузнецов » 18 апр 2006, 08:20

Уважаемые Разработчики!

Добавьте, пожалуйста, диагностику хотябы в firebird.log!

У меня UDF слинкованна только с libc.so.6. (см. ссылку)
И всё равно не грузится.
При отсутствии каких-либо вразумительных сообщений,
непонятно что ещё можно сделать.

v6y
Сообщения: 78
Зарегистрирован: 12 мар 2005, 17:45

Сообщение v6y » 18 апр 2006, 08:39

Владимир Кузнецов писал(а):Уважаемые Разработчики!

Добавьте, пожалуйста, диагностику хотябы в firebird.log!

У меня UDF слинкованна только с libc.so.6. (см. ссылку)
И всё равно не грузится.
При отсутствии каких-либо вразумительных сообщений,
непонятно что ещё можно сделать.
У меня все ваши функции нормально отработали на том же самом FB 2.0 RC1. Попробуйте в тестовой программе выполнить

Код: Выделить всё

if (!(dlhandle=dlopen("vv_udf.so",RTLD_LAZY))) printf("Error: %s\n",dlerror()); 
else  printf("Success\n");
Может что и прояснится...

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 18 апр 2006, 17:54

v6y писал(а): У меня все ваши функции нормально отработали на том же самом FB 2.0 RC1.
RC1 скомпилён в среде

1. RedHat8 (kernel 2.4.18-14 + gcc 3.2 + libc 2.2.93) - SS non-NPTL
2. RedHat9 (kernel 2.4.20-8 + gcc 3.2.2 + libc 2.3.2) - SS NPTL & CS

у тебя видимо что-то совместимое. А на пятом федорином горе gcc уже 4.1. Такшта...

v6y
Сообщения: 78
Зарегистрирован: 12 мар 2005, 17:45

Сообщение v6y » 18 апр 2006, 21:47

Merlin писал(а):
v6y писал(а): У меня все ваши функции нормально отработали на том же самом FB 2.0 RC1.
RC1 скомпилён в среде

1. RedHat8 (kernel 2.4.18-14 + gcc 3.2 + libc 2.2.93) - SS non-NPTL
2. RedHat9 (kernel 2.4.20-8 + gcc 3.2.2 + libc 2.3.2) - SS NPTL & CS

у тебя видимо что-то совместимое. А на пятом федорином горе gcc уже 4.1. Такшта...
Если говорить о несовместимости, то тут скорее от версии GLIBC больше зависит. У меня GLIBC 2.3.2 ( а на ФедОре какая?), gcc 3.3.5 и UDF откомпиленная автором топика (GCC: (GNU) 4.1.0 20060304 (Red Hat 4.1.0-2)) у меня отработала без проблем.

Владимир Кузнецов
Сообщения: 9
Зарегистрирован: 16 апр 2006, 17:42

Сообщение Владимир Кузнецов » 08 сен 2006, 15:41

Та же проблема с
FirebirdSS-2.0.0.12724-ReleaseCandidate4.nptl.i686.rpm
и
Fedore Core 5

Решил путём:

1. установки пакаджей (yum)
compat-gcc-32
compat-libstdc++-33

2. перекомпиляции моей udf.so используя gcc32

Самое забавное, что udf.so компилированная
из под gcc 3.2 на другом компьютере с Slackware 10.1
не работатет на Fedore Core 5!


Ещё мне кто будет рассказывать про низкую TCO для Linux - поубиваю.
Вот Вы можете представить С dll скомпилированную на win98, которая не работает на 2003?
Я не могу.

Ответить