PGSQL C Interface - Mailing list pgsql-general

From Dale Anderson
Subject PGSQL C Interface
Date
Msg-id s843925a.014@crystalsugar.com
Whole thread Raw
Responses Re: [GENERAL] PGSQL C Interface
List pgsql-general
When compiling the test C program for Postgres, I get the following errors.  Can anyone help me with what the error
mightbe.  I have included th error message when compiling, and the source code ofr the tes. 

Thanks in advance,
Dale.



$ gcc -I/usr/include/pgsql dba.c -o dba
/tmp/cca257351.o: In function `exit_nicely':
/tmp/cca257351.o(.text+0x8): undefined reference to `PQfinish'
/tmp/cca257351.o: In function `main':
/tmp/cca257351.o(.text+0x62): undefined reference to `PQsetdbLogin'
/tmp/cca257351.o(.text+0x73): undefined reference to `PQstatus'
/tmp/cca257351.o(.text+0x9c): undefined reference to `PQerrorMessage'
/tmp/cca257351.o(.text+0xce): undefined reference to `PQexec'
/tmp/cca257351.o(.text+0xe5): undefined reference to `PQresultStatus'
/tmp/cca257351.o(.text+0x10f): undefined reference to `PQclear'
/tmp/cca257351.o(.text+0x127): undefined reference to `PQclear'
/tmp/cca257351.o(.text+0x138): undefined reference to `PQexec'
/tmp/cca257351.o(.text+0x14f): undefined reference to `PQresultStatus'
/tmp/cca257351.o(.text+0x177): undefined reference to `PQclear'
/tmp/cca257351.o(.text+0x18f): undefined reference to `PQclear'
/tmp/cca257351.o(.text+0x1a0): undefined reference to `PQexec'
/tmp/cca257351.o(.text+0x1b7): undefined reference to `PQresultStatus'
/tmp/cca257351.o(.text+0x1df): undefined reference to `PQclear'
/tmp/cca257351.o(.text+0x1f7): undefined reference to `PQnfields'
/tmp/cca257351.o(.text+0x21d): undefined reference to `PQfname'
/tmp/cca257351.o(.text+0x255): undefined reference to `PQntuples'
/tmp/cca257351.o(.text+0x289): undefined reference to `PQgetvalue'
/tmp/cca257351.o(.text+0x2c1): undefined reference to `PQclear'
/tmp/cca257351.o(.text+0x2d2): undefined reference to `PQexec'
/tmp/cca257351.o(.text+0x2e3): undefined reference to `PQclear'
/tmp/cca257351.o(.text+0x2f4): undefined reference to `PQexec'
/tmp/cca257351.o(.text+0x305): undefined reference to `PQclear'
/tmp/cca257351.o(.text+0x311): undefined reference to `PQfinish'








―---------------[  CODE ]------------------------------------------------------------

/*
 * testlibpq.c Test the C version of Libpq, the Postgres frontend
 * library.
 *
 *
 */

#include <stdio.h>
#include "/usr/include/pgsql/postgres.h"
#include "/usr/include/pgsql/libpq-fe.h"
#include "/usr/include/pgsql/libpq/pqcomm.h"

void exit_nicely(PGconn *conn)
{
    PQfinish(conn);
    exit(1);
}

main()
{
    char       *pghost,
               *pgport,
               *pgoptions,
               *pgtty;
    char       *dbName;
    int         nFields;
    int         i,
                j;

    /* FILE *debug; */

    PGconn     *conn;
    PGresult   *res;

    /*
     * begin, by setting the parameters for a backend connection if the
     * parameters are null, then the system will try to use reasonable
     * defaults by looking up environment variables or, failing that,
     * using hardwired constants
     */
    pghost = NULL;              /* host name of the backend server */
    pgport = NULL;              /* port of the backend server */
    pgoptions = NULL;           /* special options to start up the backend
                                 * server */
    pgtty = NULL;               /* debugging tty for the backend server */
    dbName = "ff";

    /* make a connection to the database */
    conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);

    /*
     * check to see that the backend connection was successfully made
     */
    if (PQstatus(conn) == CONNECTION_BAD)
    {
        fprintf(stderr, "Connection to database '%s' failed.\n", dbName);
        fprintf(stderr, "%s", PQerrorMessage(conn));
        exit_nicely(conn);
    }

    /* debug = fopen("/tmp/trace.out","w"); */
    /* PQtrace(conn, debug);  */

    /* start a transaction block */
    res = PQexec(conn, "BEGIN");
    if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
    {
        fprintf(stderr, "BEGIN command failed\n");
        PQclear(res);
        exit_nicely(conn);
    }

    /*
     * should PQclear PGresult whenever it is no longer needed to avoid
     * memory leaks
     */
    PQclear(res);

    /*
     * fetch instances from the pg_database, the system catalog of
     * databases
     */
    res = PQexec(conn, "DECLARE mycursor CURSOR FOR select * from pg_database");
    if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
    {
        fprintf(stderr, "DECLARE CURSOR command failed\n");
        PQclear(res);
        exit_nicely(conn);
    }
    PQclear(res);
    res = PQexec(conn, "FETCH ALL in mycursor");
    if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
    {
        fprintf(stderr, "FETCH ALL command didn't return tuples properly\n");
        PQclear(res);
        exit_nicely(conn);
    }

    /* first, print out the attribute names */
    nFields = PQnfields(res);
    for (i = 0; i < nFields; i++)
        printf("%-15s", PQfname(res, i));
    printf("\n\n");

    /* next, print out the instances */
    for (i = 0; i < PQntuples(res); i++)
    {
        for (j = 0; j < nFields; j++)
            printf("%-15s", PQgetvalue(res, i, j));
        printf("\n");
    }
    PQclear(res);

    /* close the cursor */
    res = PQexec(conn, "CLOSE mycursor");
    PQclear(res);

    /* commit the transaction */
    res = PQexec(conn, "COMMIT");
    PQclear(res);

    /* close the connection to the database and cleanup */
    PQfinish(conn);

    /* fclose(debug); */
}


pgsql-general by date:

Previous
From: Peter Eisentraut
Date:
Subject: Re: [GENERAL] Executing external scripts
Next
From: Karel Zak - Zakkr
Date:
Subject: Re: [GENERAL] PGSQL C Interface