Проблема с регистрацией rfunc.dll
Модераторы: kdv, Alexey Kovyazin
Проблема с регистрацией rfunc.dll
В проекте мне нужно использовать функцию 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.
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.
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Стандартные 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. Возможно, эти задачи связанные.
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. Возможно, эти задачи связанные.
FB запускается под firebird:firebirdWildSery писал(а):FB под кем запускается?
Может, ты файл доступный только руту положил в UDF.
У меня rfunc.so и всё отлично работает.
Так же советую - поставь FB2.0.1 RC1, загрузка одновременно 2-х UDF у меня сервер крючила на 2.0.
права на файлы в папке UDF у root:root
но и на fbudf тоже такие же, как на rfunc!
Сейчас поменял права на firebird - теже яйца.
А сервер у нас 1.5.4870
DECLARE EXTERNAL FUNCTION EXTRACTYEARWildSery писал(а):А, извини, это у предыдущего автора на 2-ке RC.nicolas писал(а):А сервер у нас 1.5.4870
Точку входа как указываешь? Покажи, на всякий.
TIMESTAMP
RETURNS INTEGER BY VALUE
ENTRY_POINT 'fn_year' MODULE_NAME 'rfunc';
ldd rfunc.so дает в том числе:
<address> T fn_year
т.е. точка входа есть и совпадает с определением.
Библиотеку libib_util.so уже тоже положил в /usr/lib
Не помогло
Хорошо. Объясняю с самого начала. Я вообще человек достаточно терпеливый, тем более помощь нужна мне.
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
Теперь вроде все ясно?
ЗЫ. А админам, и заслуженным разработчикам прошу не гневаться понапрасну, а хотя бы относиться подоброжелательней. Я понимаю, что айтишник айтишнику - волк, но все таки...
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
Теперь вроде все ясно?
ЗЫ. А админам, и заслуженным разработчикам прошу не гневаться понапрасну, а хотя бы относиться подоброжелательней. Я понимаю, что айтишник айтишнику - волк, но все таки...
Когда параметр UdfAccess установлен в Full, то при декларации UDF (под Линуксом по крайней мере) нужно указывать полный путь к соответствующей библиотеке
То есть, если rfunc.so лежит в /usr/lib/firebird/UDF, то делкарировать надо так:
P.S. Кстати меня несколько удивляет что никто из местных гуров не знает о таких элементарных вещах
То есть, если 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';
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Подумай об этом с другой стороны: мало кто говорит о самоочевидных вещах, хотя знают о них если не все, то многие. Например, о том, что для дыхания необходим кислород. Или о том, что если для вещей не назначено "особого места", их разбрасывают куда попало.v6y писал(а):P.S. Кстати меня несколько удивляет что никто из местных гуров не знает о таких элементарных вещах