Страница 1 из 2
Проблема с регистрацией rfunc.dll
Добавлено: 05 фев 2007, 07:40
aes
В проекте мне нужно использовать функцию 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.
Добавлено: 05 фев 2007, 07:59
Dimitry Sibiryakov
gds32.dll, например.
И вообще - открой для себя FileMon.
Добавлено: 05 фев 2007, 08:22
aes
Dimitry Sibiryakov писал(а):gds32.dll, например.
И вообще - открой для себя FileMon.
gds32.dll имеется
FileMon - как там можно увидеть, что именно требуется для rfunc.dll?
Добавлено: 05 фев 2007, 08:31
aes
Все ок, спасибо огроменное. FileMon рулит однозначно.
Добавлено: 13 мар 2007, 14:38
nicolas
Под Linux тоже самое.
Объявленная UDF не работает, говорит что не найдена точка входа или модуль.
Свои UDF уже бросил, не работает то, что идет в комплекте ib_udf и fbudf.
Чего делать и куды бечь?
Добавлено: 13 мар 2007, 15:05
Dimitry Sibiryakov
nicolas писал(а):Чего делать и куды бечь?
Туды же куда и под виндой. Только в твоем случае это будет strace или что-то в этом же роде.
Добавлено: 13 мар 2007, 15:50
kdv
fb 2.0 rc4 выкинул бы давно. в версии может быть коряга с именами подгружаемых udf, на линуксе.
Добавлено: 13 мар 2007, 15:53
nicolas
Стандартные 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. Возможно, эти задачи связанные.
Добавлено: 13 мар 2007, 16:19
WildSery
FB под кем запускается?
Может, ты файл доступный только руту положил в UDF.
У меня rfunc.so и всё отлично работает.
Так же советую - поставь FB2.0.1 RC1, загрузка одновременно 2-х UDF у меня сервер крючила на 2.0.
Добавлено: 13 мар 2007, 17:37
nicolas
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
Добавлено: 13 мар 2007, 18:11
WildSery
nicolas писал(а):А сервер у нас 1.5.4870
А, извини, это у предыдущего автора на 2-ке RC.
Точку входа как указываешь? Покажи, на всякий.
Добавлено: 13 мар 2007, 18:24
nicolas
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
Не помогло
Добавлено: 13 мар 2007, 18:26
nicolas
nicolas писал(а):
Не помогло
Помогло, когда rfunc положил из дистрибутивной папки bin в UDF.
Но это не дело. Мне надо и свои ф-ии компилировать...
Что-то в опциях компиляции м.б.
Добавлено: 13 мар 2007, 21:36
kdv
Помогло, когда rfunc положил из дистрибутивной папки bin в UDF.
Но это не дело. Мне надо и свои ф-ии компилировать...
что-что? это весь топик только потому, что ты НЕ ТУДА положил udf???
Добавлено: 13 мар 2007, 21:53
WildSery
Какой ещё нафиг дистрибутивной папки?
Ты ограничил Restrict UDF, а потом саму библиотеку положил в bin? Молодец... Просто нет слов.
Добавлено: 14 мар 2007, 00:03
nicolas
Хорошо. Объясняю с самого начала. Я вообще человек достаточно терпеливый, тем более помощь нужна мне.
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
Теперь вроде все ясно?
ЗЫ. А админам, и заслуженным разработчикам прошу не гневаться понапрасну, а хотя бы относиться подоброжелательней. Я понимаю, что айтишник айтишнику - волк, но все таки...
Добавлено: 14 мар 2007, 00:09
kdv
ib_util.so у тебя где?
еще rfunc использует вызовы gds32.
Добавлено: 14 мар 2007, 00:20
nicolas
kdv писал(а):ib_util.so у тебя где?
еще rfunc использует вызовы gds32.
И libib_util.so и libgds.so лежат в /usr/lib/ и в /usr/lib/firebird2/lib
Добавлено: 14 мар 2007, 08:52
v6y
Когда параметр 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. Кстати меня несколько удивляет что никто из местных гуров не знает о таких элементарных вещах

Добавлено: 14 мар 2007, 09:21
Dimitry Sibiryakov
v6y писал(а):P.S. Кстати меня несколько удивляет что никто из местных гуров не знает о таких элементарных вещах

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