FB2.1 и UDF

Администирование клиентской и серверной части InterBase, Firebird, Yaffil. Настройка файла конфигурации и т.п.

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

Ответить
SeventhSon
Сообщения: 25
Зарегистрирован: 11 авг 2007, 17:40

FB2.1 и UDF

Сообщение SeventhSon » 19 июн 2009, 02:44

не понимаю что происходит.сервер Linux Ubuntu,если ставлю FB из deb то не могу прикрутить UDF-не найдена.а если ставлю из исходников то всё работает.всё делаю одинаково,меняю владельца файла и права после копирования.не помогает.сама UDF не моя.может быть какая-то маленькая ошибка в самой UDF которая приводит к такому результату?или всё-таки что-то не так с правами?а может быть такое что при вызове UDF FB вызывает какие-то ещё библиотеки и вот именно их недоступность и приводит к ошибке а сама UDF не при чём?

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Re: FB2.1 и UDF

Сообщение Attid » 19 июн 2009, 11:49

в чем вопрос ? где текст ошибки ?

SeventhSon
Сообщения: 25
Зарегистрирован: 11 авг 2007, 17:40

Re: FB2.1 и UDF

Сообщение SeventhSon » 19 июн 2009, 16:18

разобрался.некоторые проблемы с подключением сторонних UDF могут быть связаны с отсутствием файла /usr/lib/libgds.so.он был в старых версиях интербейза.в FB его заменяет libfbclient.so.2.виндовый инсталятор FB предлагает скопировать в %systemroot% fbclient.dll под именем GDS.dll.возможно если ставить FB из исходников там делается симлинк,а если из пакетов то увы нет.решается проблема одной командой ln -s /usr/lib/libfbclient.so.2 /usr/lib/libgds.so.жаль что разработчики пакетов не добавляют её в постинстолл скрипт.возможно это является причиной многих глюков.

ну вот.сам спросил,сам и ответил:)

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: FB2.1 и UDF

Сообщение hvlad » 19 июн 2009, 17:17

С какой радости инсталлятор FB должен штатно (!) ломать (!) существующую библиотеку от другого (!) продукта ???

SeventhSon
Сообщения: 25
Зарегистрирован: 11 авг 2007, 17:40

Re: FB2.1 и UDF

Сообщение SeventhSon » 19 июн 2009, 19:37

виндовый инсталятор FB предлагает скопировать в %systemroot% fbclient.dll под именем GDS.dll
ничто не мешает сделать это в линуксе

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: FB2.1 и UDF

Сообщение hvlad » 20 июн 2009, 01:08

Ничто не мешает думать головой, а не...

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: FB2.1 и UDF

Сообщение hvlad » 20 июн 2009, 01:09

Добавлю. Если UDF требует gds32, то она написана для IB и нехрен её класть под FB.
Так понятнее ?

SeventhSon
Сообщения: 25
Зарегистрирован: 11 авг 2007, 17:40

Re: FB2.1 и UDF

Сообщение SeventhSon » 21 июн 2009, 04:25

ничто не мешает быть повежливее.может написана для IB но под FB работает прекрасно.тогда объясните зачем виндовый инсталятор предлагает скопировать fbclient под именем gds?
так для интереса,у меня программа написанная под IB56 работает на FB21.правда пришлось кое-что в базе подправить.но причина по которой пришлось править базу-банальные ошибки которые IB56 прощал

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: FB2.1 и UDF

Сообщение kdv » 21 июн 2009, 12:22

программа и udf - разные вещи. Программа может быть хоть под ИБ4 написана, и при успешном переносе базы может работать и с IB 2009 и с FB 2.5.
А вот UDF... есть несколько критериев, когда могут быть глюки
- в udf есть функции требующие декларации с FREE_IT, но при этом функции используют malloc вместо модуля ib_utul.dll. Тут север просто будет падать.
- udf использует функции из клиентской библиотеки (gds32.dll, fbclient.dll). Если используемые функции отличаются по реализации между FB и IB - возможны глюки и падения сервера

Основная проблема в том, что udf при некорректной работе валит сервер. Некорректная клиентская программа такого сделать не может в принципе.
тогда объясните зачем виндовый инсталятор предлагает скопировать fbclient под именем gds?
потому что у ФБ начиная с 1.5 клиент называется fbclient.dll. и если в вашу программу вкомпилировано использование gds32.dll (например, если используется IBX), то без создания gds32.dll из fbclient.dll программа не будет работать, т.е. попросту не найдет gds32.dll.
Если же подсунуть клиенту gds32.dll от InterBase, а сервер будет Firebird, то могут быть проблемы с работой приложения (вылезут несовместимости), или может сервер или клиентская часть падать - несовместимость протокола клиента и сервера.

Странно, что все это приходится объяснять, если Вы писали программы еще под IB 5.6. Как бы, IB 5 существует с 1997 года. А IB 6 - с 2000. Как минимум 9-10 лет минуло.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: FB2.1 и UDF

Сообщение hvlad » 21 июн 2009, 13:00

SeventhSon писал(а):тогда объясните зачем виндовый инсталятор предлагает скопировать fbclient под именем gds?
А он не тупо копирует. Он ещё и номер версии правит при этом. Для чего ? RTFM

SeventhSon
Сообщения: 25
Зарегистрирован: 11 авг 2007, 17:40

Re: FB2.1 и UDF

Сообщение SeventhSon » 22 июн 2009, 03:45

я может не так выразился или меня не так поняли.под IB56 я не писал ничего.программа написана другими, я сопровождаю.
так вот по UDF.как я понял прежде чем задекларировать UDF с FREE_IT её нужно соответствующим образом написать и скомпилировать.а если она написана в допотопные времена то и никакого FREE_IT в декларации быть не может.во всяком случае у меня так и есть.и сервер не падает.
зачем UDF требует libgds.so не знаю.но после того как я сделал симлинк всё работает.это факт.
собственно всё это я написал для тех кто попадёт в похожую ситуацию.может кому-то поможет

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: FB2.1 и UDF

Сообщение kdv » 22 июн 2009, 11:19

как я понял прежде чем задекларировать UDF с FREE_IT её нужно соответствующим образом написать и скомпилировать.а если она написана в допотопные времена то и никакого FREE_IT в декларации быть не может
не совсем так, правда я уже достоверно не помню - возможно 5.0 была без этой самой ib_utul.dll, но впоследствии она появилась, и использовать вызов ib_util_malloc вместо malloc в udf с FREE_IT стало обязательным. Но на тот момент разработчики этим особо не парились, т.к. в перспективе про Firebird и даже IB 6 (компилируемые другими компиляторами, и с другим менеджером памяти для malloc) никто не думал.
зачем UDF требует libgds.so не знаю.
могут еще использоваться функции конвертации дат, которые по всем версиям IB/FB совместимы.

Ответить