Проблема с регистрацией rfunc.dll

Установка базовых дистрибутивов, создание своих, распространение, установка автоматически и "вручную", файлы, необходимые для создания дистрибутивов.

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

aes
Сообщения: 43
Зарегистрирован: 05 фев 2007, 07:29

Проблема с регистрацией rfunc.dll

Сообщение aes » 05 фев 2007, 07:40

В проекте мне нужно использовать функцию fn_daypermonth указанной библиотеки. Соответственно, регистрирую ее:
DECLARE EXTERNAL FUNCTION DAYPERMONTH
INTEGER,
INTEGER
RETURNS INTEGER BY VALUE
ENTRY_POINT 'fn_daypermonth' MODULE_NAME 'rfunc.dll'

Но при попытке запроса
select daypermonth(:V_M,:V_Y) from rdb$database
идет ошибка
Invalid token.
invalid request BLR at offset 74.
function DAYPERMONTH is not defined.
module name or entrypoint could not be found.
Что ей может не хватать?
FB 2.0 RC4
rfunc.dll версия 2.1.3.1 RC 25.11.2003
Операционка winXP SP2.

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

Сообщение Dimitry Sibiryakov » 05 фев 2007, 07:59

gds32.dll, например.
И вообще - открой для себя FileMon.

aes
Сообщения: 43
Зарегистрирован: 05 фев 2007, 07:29

Сообщение aes » 05 фев 2007, 08:22

Dimitry Sibiryakov писал(а):gds32.dll, например.
И вообще - открой для себя FileMon.
gds32.dll имеется
FileMon - как там можно увидеть, что именно требуется для rfunc.dll?

aes
Сообщения: 43
Зарегистрирован: 05 фев 2007, 07:29

Сообщение aes » 05 фев 2007, 08:31

Все ок, спасибо огроменное. FileMon рулит однозначно.

nicolas
Сообщения: 33
Зарегистрирован: 11 сен 2006, 21:37

Сообщение nicolas » 13 мар 2007, 14:38

Под Linux тоже самое.
Объявленная UDF не работает, говорит что не найдена точка входа или модуль.
Свои UDF уже бросил, не работает то, что идет в комплекте ib_udf и fbudf.

Чего делать и куды бечь?

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

Сообщение Dimitry Sibiryakov » 13 мар 2007, 15:05

nicolas писал(а):Чего делать и куды бечь?
Туды же куда и под виндой. Только в твоем случае это будет strace или что-то в этом же роде.

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

Сообщение kdv » 13 мар 2007, 15:50

fb 2.0 rc4 выкинул бы давно. в версии может быть коряга с именами подгружаемых udf, на линуксе.

nicolas
Сообщения: 33
Зарегистрирован: 11 сен 2006, 21:37

Сообщение nicolas » 13 мар 2007, 15:53

Стандартные UDF пошли, когда поставил в firebird.conf опцию
UDFAccess Restrict UDF
т.е. когда фактически ограничил местоположение UDF жестко.
Зато теперь на UDF сторонних производителей другая ругань:

Access to UDF library "/usr/lib/firebird2/UDF/librfunc.so" is denied by server administrator.

Чего-то я сомневаюсь, что strace и иже с ним помогут ((

ЗЫ. И почему при декларации ф-ии из fbudf.so имя модуля понимается "как есть", а rfunc.so кушать не хочет, требует librfunc.so. Возможно, эти задачи связанные.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 13 мар 2007, 16:19

FB под кем запускается?
Может, ты файл доступный только руту положил в UDF.

У меня rfunc.so и всё отлично работает.
Так же советую - поставь FB2.0.1 RC1, загрузка одновременно 2-х UDF у меня сервер крючила на 2.0.

nicolas
Сообщения: 33
Зарегистрирован: 11 сен 2006, 21:37

Сообщение nicolas » 13 мар 2007, 17:37

WildSery писал(а):FB под кем запускается?
Может, ты файл доступный только руту положил в UDF.

У меня rfunc.so и всё отлично работает.
Так же советую - поставь FB2.0.1 RC1, загрузка одновременно 2-х UDF у меня сервер крючила на 2.0.
FB запускается под firebird:firebird
права на файлы в папке UDF у root:root
но и на fbudf тоже такие же, как на rfunc!
Сейчас поменял права на firebird - теже яйца.

А сервер у нас 1.5.4870

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 13 мар 2007, 18:11

nicolas писал(а):А сервер у нас 1.5.4870
А, извини, это у предыдущего автора на 2-ке RC.
Точку входа как указываешь? Покажи, на всякий.

nicolas
Сообщения: 33
Зарегистрирован: 11 сен 2006, 21:37

Сообщение nicolas » 13 мар 2007, 18:24

WildSery писал(а):
nicolas писал(а):А сервер у нас 1.5.4870
А, извини, это у предыдущего автора на 2-ке RC.
Точку входа как указываешь? Покажи, на всякий.
DECLARE EXTERNAL FUNCTION EXTRACTYEAR
TIMESTAMP
RETURNS INTEGER BY VALUE
ENTRY_POINT 'fn_year' MODULE_NAME 'rfunc';

ldd rfunc.so дает в том числе:

<address> T fn_year

т.е. точка входа есть и совпадает с определением.
Библиотеку libib_util.so уже тоже положил в /usr/lib

Не помогло

nicolas
Сообщения: 33
Зарегистрирован: 11 сен 2006, 21:37

Сообщение nicolas » 13 мар 2007, 18:26

nicolas писал(а): Не помогло
Помогло, когда rfunc положил из дистрибутивной папки bin в UDF.
Но это не дело. Мне надо и свои ф-ии компилировать...
Что-то в опциях компиляции м.б.

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

Сообщение kdv » 13 мар 2007, 21:36

Помогло, когда rfunc положил из дистрибутивной папки bin в UDF.
Но это не дело. Мне надо и свои ф-ии компилировать...
что-что? это весь топик только потому, что ты НЕ ТУДА положил udf???

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 13 мар 2007, 21:53

Какой ещё нафиг дистрибутивной папки?
Ты ограничил Restrict UDF, а потом саму библиотеку положил в bin? Молодец... Просто нет слов.

nicolas
Сообщения: 33
Зарегистрирован: 11 сен 2006, 21:37

Сообщение nicolas » 14 мар 2007, 00:03

Хорошо. Объясняю с самого начала. Я вообще человек достаточно терпеливый, тем более помощь нужна мне.
1) Есть Ubuntu 6.10 + FB 1.5.4870, установленный из репозитория.
2) FB благополучно установлен, запущен и работает. Базы создаются, таблицы создаются, данные вбиваются и выбираются. Все ОК.
3) Пробуем подключить UDF. По месту установки, а именно /usr/lib/firebird2/UDF лежат 2 предустановленных UDF: fbudf.so и ib_udf.so.
Ф-ии из них работают, если в конфигурационном файл закомментирована строка с UDFAccess.
В той же папке UDF лежит СОБРАННАЯ из исходников rfunc.so
4) Если стоит UDFAccess Full - ф-ии из стандартных UDF не работают с диагностикой "не найдена точка входа или имя модуля", аналогично не работают ф-ии из rfunc.
5) Если стоит UDFAccess Restrict UDF - т.е. ограничиваем UDF только папкой UDF от корня сервера FB, то работает только fbudf, остальные валятся с ошибкой Access to UDF library librfunc.so denied by administrator.
6) В дистрибутиве RFUNC также есть предсобранный модуль rfunc.so. Который, будучи положен в папку UDF ведет себя аналогично fbudf,
т.е. работает при UDFAccess Restrict UDF, и не работает при UDFAccess Full

Теперь вроде все ясно?

ЗЫ. А админам, и заслуженным разработчикам прошу не гневаться понапрасну, а хотя бы относиться подоброжелательней. Я понимаю, что айтишник айтишнику - волк, но все таки...

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

Сообщение kdv » 14 мар 2007, 00:09

ib_util.so у тебя где?
еще rfunc использует вызовы gds32.

nicolas
Сообщения: 33
Зарегистрирован: 11 сен 2006, 21:37

Сообщение nicolas » 14 мар 2007, 00:20

kdv писал(а):ib_util.so у тебя где?
еще rfunc использует вызовы gds32.
И libib_util.so и libgds.so лежат в /usr/lib/ и в /usr/lib/firebird2/lib

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

Сообщение v6y » 14 мар 2007, 08:52

Когда параметр UdfAccess установлен в Full, то при декларации UDF (под Линуксом по крайней мере) нужно указывать полный путь к соответствующей библиотеке
То есть, если rfunc.so лежит в /usr/lib/firebird/UDF, то делкарировать надо так:

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

DECLARE EXTERNAL FUNCTION EXTRACTYEAR
TIMESTAMP
RETURNS INTEGER BY VALUE
ENTRY_POINT 'fn_year' MODULE_NAME '/usr/lib/firebird/UDF/rfunc';
P.S. Кстати меня несколько удивляет что никто из местных гуров не знает о таких элементарных вещах :wink:

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

Сообщение Dimitry Sibiryakov » 14 мар 2007, 09:21

v6y писал(а):P.S. Кстати меня несколько удивляет что никто из местных гуров не знает о таких элементарных вещах :wink:
Подумай об этом с другой стороны: мало кто говорит о самоочевидных вещах, хотя знают о них если не все, то многие. Например, о том, что для дыхания необходим кислород. Или о том, что если для вещей не назначено "особого места", их разбрасывают куда попало.

Ответить