gpt4 book ai didi

用C连接Postgresql

转载 作者:行者123 更新时间:2023-11-30 18:36:07 24 4
gpt4 key购买 nike

我正在尝试将 Windows 上运行的 C 脚本连接到我的 Postgresql 数据库。

目前,我在网站上得到了这个脚本:

#include <stdio.h>
#include "libpq-fe.h"
#include <string>
#include <stdlib.h>

int main() {
PGconn *conn;
PGresult *res;
int rec_count;
int row;
int col;



conn = PQconnectdb("dbname=ljdata host=localhost user=dataman password=supersecret");

if (PQstatus(conn) == CONNECTION_BAD) {
puts("We were unable to connect to the database");
exit(0);
}

res = PQexec(conn,
"update people set phonenumber=\'5055559999\' where id=3");

res = PQexec(conn,
"select lastname,firstname,phonenumber from people order by id");

if (PQresultStatus(res) != PGRES_TUPLES_OK) {
puts("We did not get any data!");
exit(0);
}

rec_count = PQntuples(res);

printf("We received %d records.\n", rec_count);
puts("==========================");

for (row=0; row<rec_count; row++) {
for (col=0; col<3; col++) {
printf("%s\t", PQgetvalue(res, row, col));
}
puts("");
}

puts("==========================");

PQclear(res);

PQfinish(conn);

return 0;
}

我复制了 libpq-fe.h、postgres_ext.c 和 pg_config_ext.c 以避免错误。

现在我遇到了所有这些错误:

  • 未定义对“PQconnectdb”的引用
  • 未定义对“PQresultStatus”的引用
  • ...

很明显,我没有包含我需要的所有函数的 file.c,但我找不到它。

我在另一个论坛上看到我需要创建一个 makefile 来告诉编译器使用 libpq.dll(我有这个文件),但我不知道这样做。

我怎样才能让它工作?

编辑

所以现在当我尝试像这样编译它时:

gcc -I "C:\Program Files\PostgreSQL\9.6\include" -L "C:\Program Files\PostgreSQL\9.6\lib" test.c -lpq

我收到错误:

C:\Program Files\PostgreSQL\9.6\lib/libpq.dll: file not recognized: File format not recognized
collect2.exe: error: ld returned 1 exit status

我认为这已经接近最终的解决方案了。

根据我所做的研究,我发现libpq.dll是32位的,但我的环境是64位的。这会改变什么吗?

编辑2

编译现在可以正确地使用此行:

gcc -m64 -I "C:\Program Files\PostgreSQL\9.6\include" -L "C:\Program Files\PostgreSQL\9.6\lib" test.c -lpq -o test.exe

但是当我双击 .exe 时出现以下错误:

“无法启动程序,因为缺少 LIBPQ.dll”

所以这显然意味着我必须将 libpq.dll 链接到 Program Files/PG/9.6/lib 的链接。

这里的问题是我想构建一个独立的 .exe,它可能嵌入 Postgresql 库以正常工作,即使计算机目标尚未安装 Postgresql

(这是可能的,例如在 Java 中,当我们构建一个包含所有外部库的 Jar 时)

用C语言可以吗?我想我需要调整我的编译行,但我没有找到可以添加哪个参数来导入 .exe 中所有需要的库

最佳答案

从您的编辑中我看到您已经弄清楚如何使用-I-L gcc的选项目前为止。很好。

我猜您的遗留问题是您正在尝试链接 64 位 libpq.dll在 32 位模式下,反之亦然。

您可以使用 gcc 设置模式选项 -m32-m64 .

您可以使用 file libpq.dll 检查共享库,这应该告诉您它是 32 位库还是 64 位库。

如果gcc告诉您类似以下信息:未编译 64 位模式,您需要安装适当版本的 gcc .

解决libpq.dll的问题运行时找不到,则将其所在目录放入PATH环境变量,或使用选项-Wl,-rpath,<em><directory with libpq.dll></em> .

关于用C连接Postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42995034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com