当我尝试使用PQnfelds时,PostgreSQL说“未找到符号”

时间:2019-07-10 16:32:41

标签: c postgresql libpq

我编写了一个要在PostgreSQL内部执行的C函数(使用CREATE FUNCTION ... LANGUAGE C;命令),但是当我这样做时,它会响应“ PQnfields:找不到符号”。 我试图在编译时包括libpq库所在的路径,如下所示:

 gcc -lpq -fpic -c crossdb.c -I`pg_config --includedir-server` -I /usr/include/ -std=c99

但是没有用。 我认为根本不可能使用libpq从函数中查询数据库...因此,如果您知道怎么做或导致此错误消息的原因,我很乐意向您倾听。 >

1 个答案:

答案 0 :(得分:0)

您必须将包含libpq.so.*的目录放置在PostgreSQL的共享库路径上,方法是在服务器环境中设置LD_LIBRARY_PATH或在编译行中添加-Wl,-rpath,/path/to/so

您是否使用PGXS框架来构建共享库?这会自动为您提供大多数适当的标志。

查看postgres_fdw的{​​{1}}以获得灵感,它也与Makefile链接。

退后一步:确定要调用客户端的名为libpq的函数吗?我将调查一个外国表或crossdb是否可以完成您想实现的目标。