UDF & FreeBSD

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

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

Ответить
dmitryb
Сообщения: 1
Зарегистрирован: 06 июн 2005, 22:38

UDF & FreeBSD

Сообщение dmitryb » 08 июн 2005, 01:07

Привет. Помогите разобраться, плз.

Есть сервер firebird 1.5.2 под FreeBSD. Поставлен в /usr/local/firebird .
Пытаюсь сделать там UDF. Кладу файл liblist_udf.so в /usr/local/firebird/UDF:

$ ls -l /usr/local/firebird | grep UDF
drwxr-xr-x 2 firebird firebird 512 Jun 7 23:19 UDF

$ ls -l /usr/local/firebird/UDF/liblist_udf.so
-r-xr-xr-x 1 firebird firebird 750271 May 10 22:05 /usr/local/firebird/UDF/liblist_udf.so

$ nm /usr/local/firebird/UDF/liblist_udf.so | grep -i createiblist
0007b744 T CREATEIBLIST
0007afa8 T CreateIbList

$ nm /usr/local/firebird/UDF/liblist_udf.so | grep -i " U "
U main
/* вот этот undefined мне не очень нравится. это нормально или нет? */

декларирую UDF:

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

DECLARE EXTERNAL FUNCTION CREATELIST
    INTEGER
RETURNS INTEGER BY VALUE
ENTRY_POINT 'CREATEIBLIST' MODULE_NAME 'list_udf'
пока все замечательно (или почти замечательно, если учесть undefined 'main').

в IBExpert't пытаюсь создать процедуру, использующую UDF:

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

SET TERM ^ ;

CREATE PROCEDURE TEST_PROC 
AS
DECLARE VARIABLE OV1 INTEGER;
begin
 ov1 = CREATELIST(0);
end
^

SET TERM ; ^
нажимаю Compile procedure - IBExpert говорит Creating Procedure TEST_PROC, Description of TEST_PROC и предлагает нажать Commit... Вот тут-то все и начинается... :)

По Commit'у говорит:
Invalid token.
invalid request BLR at offset 26.
function CREATELIST is not defined.
module name or entry point could not be found.
:(

(наверное это не из-за того, что сервер не видит liblist_udf.so, так как при отсутствии этого файла он говорит "Access to UDF library "liblist_udf.so" is denied by server administrator")

конфиг (практически по умолчанию):

RootDirectory = /usr/local/firebird
UdfAccess = Restrict UDF

В каком месте мне лыжи смазать, чтоб поехали?

Ответить