当我尝试使用 PQnfelds 时,PostgreSQL 显示 'symbol not found'
PostgreSQL says 'symbol not found' when I try to use PQnfelds
我编写了一个要从 PostgreSQL 中执行的 C 函数(使用 CREATE FUNCTION ... LANGUAGE C;
命令),但是当我这样做时,它会响应 'PQnfields: symbol not found'。
我试图在编译时包含 libpq 库所在的路径,如下所示:
gcc -lpq -fpic -c crossdb.c -I`pg_config --includedir-server` -I /usr/include/ -std=c99
但是没有用。
我认为根本不可能使用 libpq 从函数查询数据库...因此,如果您知道如何做或导致此错误消息的原因,我很乐意听取您的意见。
您必须将包含 libpq.so.*
的目录放在 PostgreSQL 的共享库路径中,方法是在服务器环境中设置 LD_LIBRARY_PATH
或将 -Wl,-rpath,/path/to/so
添加到编译行。
您是否使用 PGXS 框架构建共享库?这会自动为您提供大部分正确的标志。
查看 postgres_fdw
的 Makefile
以获得灵感,它也与 libpq
链接。
退后一步:您确定需要一个名为 crossdb
的函数来调用客户端吗?我会调查外国 table 或 dblink
是否可以完成您想要实现的目标。
我编写了一个要从 PostgreSQL 中执行的 C 函数(使用 CREATE FUNCTION ... LANGUAGE C;
命令),但是当我这样做时,它会响应 'PQnfields: symbol not found'。
我试图在编译时包含 libpq 库所在的路径,如下所示:
gcc -lpq -fpic -c crossdb.c -I`pg_config --includedir-server` -I /usr/include/ -std=c99
但是没有用。 我认为根本不可能使用 libpq 从函数查询数据库...因此,如果您知道如何做或导致此错误消息的原因,我很乐意听取您的意见。
您必须将包含 libpq.so.*
的目录放在 PostgreSQL 的共享库路径中,方法是在服务器环境中设置 LD_LIBRARY_PATH
或将 -Wl,-rpath,/path/to/so
添加到编译行。
您是否使用 PGXS 框架构建共享库?这会自动为您提供大部分正确的标志。
查看 postgres_fdw
的 Makefile
以获得灵感,它也与 libpq
链接。
退后一步:您确定需要一个名为 crossdb
的函数来调用客户端吗?我会调查外国 table 或 dblink
是否可以完成您想要实现的目标。