首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PostgreSQL中创建函数时遇到"undefined symbol: Float8GetDatum“

在PostgreSQL中创建函数时遇到"undefined symbol: Float8GetDatum“
EN

Stack Overflow用户
提问于 2019-08-29 10:26:26
回答 1查看 339关注 0票数 0

我使用的是redhat linux 7.3中的PostgreSQL11.5。在sql脚本中,该函数的创建方式如下:

代码语言:javascript
复制
create or replace function alpine_miner_float_array_sum_accum(state float[], ind float[])
returns float[]
AS 'alpine_miner', 'alpine_miner_float_array_sum_accum'
language C immutable;

但它会给出以下错误:

代码语言:javascript
复制
ERROR:  could not load library "/usr/pgsql-11/lib/alpine_miner.so": /usr/pgsql-11/lib/alpine_miner.so: undefined symbol: Float8GetDatum
SQL state: XX000

我发现/usr/pgsql-11/lib/alpine_min.so确实存在,ld命令的输出如下:

代码语言:javascript
复制
linux-vdso.so.1 =>  (0x00007ffda65d6000)
libc.so.6 => /lib64/libc.so.6 (0x00007eff25a67000)
/lib64/ld-linux-x86-64.so.2 (0x00007eff26051000)

ldd命令:

代码语言:javascript
复制
ld: warning: cannot find entry symbol _start; not setting start address
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `construct_md_array'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `get_call_result_type'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `ArrayGetNItems'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `logf'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `deconstruct_array'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `CurrentMemoryContext'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `acosf'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `GetAttributeByName'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `elog_finish'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `errstart'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `pg_detoast_datum'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `exp'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `sqrtf'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `MemoryContextAllocZero'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `elog_start'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `errmsg'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `BlessTupleDesc'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `get_typlenbyvalalign'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `Float8GetDatum'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `log'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `pow'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `errdetail'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `DatumGetFloat8'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `errfinish'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `sqrt'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `heap_form_tuple'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `format_procedure'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `construct_array'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `MemoryContextAlloc'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `pfree'
/usr/pgsql-11/lib/alpine_miner.so: undefined reference to `errcode'

你有什么想法吗?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-08-29 12:40:51

在构建alpine_miner.so时,您是在一个PostgreSQL安装的基础上构建它的,该安装的配置与您尝试使用它的安装不同。

在标题问题的情况下,alpine_miner.so是使用未定义的USE_FLOAT8_BYVAL构建的,但您的PostgreSQL已经定义了它:

代码语言:javascript
复制
#ifdef USE_FLOAT8_BYVAL
static inline Datum
Float8GetDatum(float8 X)
{
        union
        {
                float8          value;
                int64           retval;
        }                       myunion;

        myunion.value = X;
        return Int64GetDatum(myunion.retval);
}
#else
extern Datum Float8GetDatum(float8 X);
#endif

但未定义的链接器引用列表还表明,您正在尝试将共享对象加载到旧的或修改过的PostgreSQL中:

例如,自2004年4月提交375369acd1c以来,BlessTupleDesc一直在服务器中。

要获得进一步的帮助,您必须公开PostgreSQL的确切制造商和版本以及alpine_miner.so的确切构建过程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57702176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档