【发布时间】:2017-03-29 17:33:15
【问题描述】:
我请求一些帮助来编译我的 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 库。
经过一些网络搜索,我找到了“-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 的参数或方式吗?它完全独立且无需任何库要求?
编辑
截图:
【问题讨论】:
标签: c windows postgresql dll