我请求帮助编译我的Postgres数据库连接脚本。现在编译得很好但是现在我执行它时遇到了问题。
有代码:
#include <stdio.h>
#include "libpq-fe.h"
#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;
}
这是它实际工作的编译线:
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
但是我要做的是编译二进制.exe中的.c / .dll等所有方法,我打算分发这些方法,并且postgresql libs不会安装在目标机器上。
经过一些网络搜索,我找到了“-static”参数,但我不确定它是我正在寻找的,我无法用这个参数进行编译。
然后我尝试添加“-static-libgcc”,结果为:
gcc -m64 -static-libgcc -I "C:\Program Files\PostgreSQL\9.6\include" -L "C:\Program Files\PostgreSQL\9.6\lib" test.c -lpq -o test.exe
但是当我尝试运行它时,我仍然遇到“系统错误”:
“无法运行脚本,因为您的计算机上缺少LIBPQ.dll” (不确定我的法语翻译是否准确)
你知道参数或我可以将我的C程序编译成二进制.exe的方式,它是完全独立的,没有任何库要求吗?
修改
屏幕截图:
答案 0 :(得分:1)
坚持动态链接。
您的问题是系统无法在运行时找到libpq.dll
。
有两种解决方案:
将C:\Program Files\PostgreSQL\9.6\lib
添加到PATH
环境变量。
将libpq.dll
的副本放在与可执行文件相同的路径中。