无法在 Debian 11 上将 FreeAdhocUDF 与 Firebird 3/4 一起使用

问题描述 投票:0回答:2

我们在 Debian 11 上使用 FreeAdhocUDF 库 http://freeadhocudf.org 和 Firebird 时遇到问题

一些基本信息:

  • Debian 11 64 位

  • uname -a
    说:

    Linux RMVM18 5.10.0-21-amd64 #1 SMP Debian 5.10.162-1 (2023-01-21)
    x86_64 GNU/Linux
    

Firebird 是通过

apt
安装的,带有这些包:

firebird3.0-common 3.0.7.33374.ds
firebird3.0-server 3.0.7.33374.ds
firebird3.0-server-core q3.0.7.33374.ds
firebird3.0-utils q3.0.7.33374.ds

之后直接使用 https://firebirdsql.org/en/firebird-3-0/#Linux_AMD64.

中的安装包

最后,我们尝试了 Firebird 的版本 4,但也没有运气:https://github.com/FirebirdSQL/firebird/releases/download/v4.0.2/Firebird-4.0.2.2816-0.amd64.tar。 z

Firebird 本身在两个版本中都运行完美。只有 FreeAdhocUDF 的使用失败。

我们检查了lib的依赖关系

ldd FreeAdhocUDF.so

成功,结果是:

cd.1 (0x00007fff557da000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fae5a559000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fae5a384000)
libib_util.so => /lib/x86_64-linux-gnu/libib_util.so (0x00007fae5a37f000)
libicudataFAU.so.44 => /lib/x86_64-linux-gnu/libicudataFAU.so.44
(0x00007fae5933f000)
libicui18nFAU.so.44 => /lib/x86_64-linux-gnu/libicui18nFAU.so.44
(0x00007fae58f65000)
libicuucFAU.so.44 => /lib/x86_64-linux-gnu/libicuucFAU.so.44
(0x00007fae58c12000)
libfbclient.so.2 => /lib/x86_64-linux-gnu/libfbclient.so.2
(0x00007fae58a6e000)
/lib64/ld-linux-x86-64.so.2 (0x00007fae5a8d3000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0
(0x00007fae58a4c000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fae58a46000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fae58879000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fae5885f000)
libtommath.so.1 => /lib/x86_64-linux-gnu/libtommath.so.1
(0x00007fae5883d000)

firebird.conf
中的设置:

UdfAccess = Restrict
(我们尝试了几个选项,包括
Full

无论我们尝试了下面描述的哪种变体,结果总是这样:

Select f_abs(-1) from rdb$database;
Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements.
Use of UDF/BLOB-filter module at location FreeAdhocUDF is not
allowed by server configuration.
-------------------------------------------------------------------------------------------------------------
SQLCODE: -902
SQLSTATE: 28000
GDSCODE: 335544831

怎么了?我们还能尝试什么?

firebird
2个回答
1
投票

错误文本是:“服务器配置不允许在 FreeAdhocUDF 位置使用 UDF/BLOB 过滤器模块”。失败的依赖项或丢失的库会给你“找不到模块名称或入口点”错误。

值“Restict”后面必须跟有允许(并实际查找)UDF 库的目录列表。简单的“限制”是没有意义的,很可能允许 UDF 库仅驻留在 Firebird 根目录中,这是一个坏主意。

如果将 UdfAccess 设置为“完整”,则必须在“DECLARE FUNCTION”查询中提供库的绝对路径。

请记住,必须重新启动 Firebird 服务器(如果配置为 SuperServer 或 SuperClassic)以反映配置更改。

要进行详细调查,您可以使用 dltrace 实用程序查看尝试从何处加载库。


0
投票

也许您不应该再尝试与 13 年前收到最新更新的图书馆合作。 FreeadhocUDF 绝对是一匹死马,大部分功能都可以在 fb>=3 中轻松替换为相同的函数名称和参数结构,就像我们在产品中所做的一样https://ibexpert.net/cms/ibexpertfunctionlibrary 替换如果它们有意义的话,已经超过了原始功能的 95%。

© www.soinside.com 2019 - 2024. All rights reserved.