在C中连接Postgresql
我正在尝试将运行在Windows上的C脚本连接到我的Postgresql数据库 目前,我在一个网站上看到了这个脚本:在C中连接Postgresql,c,windows,postgresql,C,Windows,Postgresql,我正在尝试将运行在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
#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;
}
我得到了一个错误:
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与程序文件/PG/9.6/lib链接起来
这里的问题是,我想构建一个独立的.exe,它可能嵌入Postgresql库,即使计算机目标上没有安装Postgresql,也能正常工作
这是可能的,例如在Java中,当我们构建一个Jar时,所有外部库都被复制到Jar中
在C语言中可能吗?我想我需要修改我的编译行,但是我没有找到可以添加哪个参数来导入.exe中所有需要的库,从您的编辑中我看到您现在已经知道了如何使用gcc的-I和-L选项。好 我猜您的问题在于您试图以32位模式链接64位libpq.dll,反之亦然 您可以使用gcc选项-m32和-m64设置模式 您可以使用文件libpq.dll检查共享库,该文件将告诉您它是32位库还是64位库 如果gcc告诉您:64位模式未编译,则需要安装适当版本的gcc
要解决在运行时找不到libpq.dll的问题,请将其所在的目录放入PATH环境变量中,或使用选项-Wl,-rpath,。您不需要C文件,只需在链接器中包含Postgres库,如下所示:-lpq。因为我在Windows上,所以必须使用mingw编译它。当我键入g++-lpq test.c时,我得到以下错误:找不到-lpqSee这个问题:您是否也在编译那些.c文件?如果您使用的是gcc,例如gcc main.c postgres_ext.c pg_config_ext.c-o ouput抱歉,我犯了一个错误,这些文件都是header.hYes,这就是问题所在!我安装了MinGW-w64,现在编译效果很好。谢谢!我在执行过程中遇到了另一个问题,我认为这也与编译有关。如果你能回答的话,我编辑了我的第一篇文章。谢谢嗯,你应该回答另一个问题,或者实际运行网络搜索,因为这是一个日常问题。我已经修改了答案。我进行了一次网络搜索,但没有找到我想要的东西。无论如何,谢谢你的回答,但它似乎并没有真正解决我的问题,因为我正在寻找一种方法来构建一个独立的.exe,旁边没有任何目录。但别担心,我会写一个新问题。谢谢
gcc -m64 -I "C:\Program Files\PostgreSQL\9.6\include" -L "C:\Program Files\PostgreSQL\9.6\lib" test.c -lpq -o test.exe