执行需要ext lib的C脚本

时间:2017-03-29 17:33:16

标签: c windows postgresql dll

参考Connect Postgresql in C

我请求帮助编译我的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的方式,它是完全独立的,没有任何库要求吗?

修改

屏幕截图:

error

1 个答案:

答案 0 :(得分:1)

坚持动态链接。

您的问题是系统无法在运行时找到libpq.dll

有两种解决方案:

  1. C:\Program Files\PostgreSQL\9.6\lib添加到PATH环境变量。

  2. libpq.dll的副本放在与可执行文件相同的路径中。