Thread: C & C ++Program Problem
hi all, am trying to use C & C++ libraries with postgresql 7.2. while compiling a sample programe(attached) there were thse errors encounterd !.. [arindam@my src]$ [arindam@my src]$ gcc egTry.c /tmp/ccTLiExh.o: In function `main': /tmp/ccTLiExh.o(.text+0x12): undefined reference to `PQconnectdb' /tmp/ccTLiExh.o(.text+0x2b): undefined reference to `PQstatus' /tmp/ccTLiExh.o(.text+0x5c): undefined reference to `PQerrorMessage' /tmp/ccTLiExh.o(.text+0xac): undefined reference to `PQexec' /tmp/ccTLiExh.o(.text+0xc5): undefined reference to `PQresultStatus' /tmp/ccTLiExh.o(.text+0xf3): undefined reference to `PQclear' /tmp/ccTLiExh.o(.text+0x104): undefined reference to `PQfinish' /tmp/ccTLiExh.o(.text+0x12e): undefined reference to `PQntuples' /tmp/ccTLiExh.o(.text+0x159): undefined reference to `PQgetvalue' /tmp/ccTLiExh.o(.text+0x186): undefined reference to `PQclear' /tmp/ccTLiExh.o(.text+0x197): undefined reference to `PQfinish' collect2: ld returned 1 exit status [arindam@my src]$ lib & include dir are in /usr/lib/pgsql-7.2 & /usr/include/pgsql-7.2. i have tried to compliethis programme with RH7.2(with postgres rpm & a configured from tar file).. i need help pls... i want to use C or C++ thanking u in advance A.H /* * testlibpq.c Test the C version of Libpq, the Postgres frontend * library. * Sample Program 1 */ #include <stdio.h> #include <pgsql-7.2/libpq-fe.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 = "masterdb"; /* 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); */ return 0; }
On Thu, May 16, 2002 at 04:07:38AM +0530, Arindam Haldar wrote: > am trying to use C & C++ libraries with postgresql 7.2. > while compiling a sample programe(attached) there were thse errors > encounterd !.. Are you linking your program with libpq? It would seem that this may not be the case, but you need to. Jeroen
hi, thanx for the hint. am re-entering c programming from DOS world !--my apologies as am again a learner. 1 more Query on to this. POstgres-7.2 was not configured with-->--with-gnu-ld , which i just saw is default set to no... So can that be problem while compling C & C++ prorgrames ? thanx again in advance for ur help. A.H Nigel J. Andrews wrote: You need to read the error messages. It's not a postgres issue it's a linking issue. Try giving the -lpq flag to gcc. On Thu, 16 May 2002, Arindam Haldar wrote: hi all, am trying to use C & C++ libraries with postgresql 7.2. while compiling a sample programe(attached) there were thse errors encounterd !.. [arindam@my src]$ [arindam@my src]$ gcc egTry.c /tmp/ccTLiExh.o: In function `main': /tmp/ccTLiExh.o(.text+0x12): undefined reference to `PQconnectdb' /tmp/ccTLiExh.o(.text+0x2b): undefined reference to `PQstatus' /tmp/ccTLiExh.o(.text+0x5c): undefined reference to `PQerrorMessage' /tmp/ccTLiExh.o(.text+0xac): undefined reference to `PQexec' /tmp/ccTLiExh.o(.text+0xc5): undefined reference to `PQresultStatus' /tmp/ccTLiExh.o(.text+0xf3): undefined reference to `PQclear' /tmp/ccTLiExh.o(.text+0x104): undefined reference to `PQfinish' /tmp/ccTLiExh.o(.text+0x12e): undefined reference to `PQntuples' /tmp/ccTLiExh.o(.text+0x159): undefined reference to `PQgetvalue' /tmp/ccTLiExh.o(.text+0x186): undefined reference to `PQclear' /tmp/ccTLiExh.o(.text+0x197): undefined reference to `PQfinish' collect2: ld returned 1 exit status [arindam@my src]$ lib & include dir are in /usr/lib/pgsql-7.2 & /usr/include/pgsql-7.2. i have tried to compliethis programme with RH7.2(with postgres rpm & a configured from tar file).. i need help pls... i want to use C or C++ thanking u in advance A.H
on my RedHat 7.2 i have inserted these lines in the file /etc/ld.so.conf /usr/lib/pgsql-7.2 using gcc -lpq egtry.c gives error--> /usr/bin/ld: cannot find -lpq collect2: ld reurned 1 exit status am very newto c , can u tellhow to use -lpq ?? thanx in anticipation A.H Ted Petrosky wrote: > I was having the same problems. Do you have the momjiam book > PostgreSQL? He gives examples of compiling C and C++ programs complete > with the command line to start compiling (on page 195). Take a look at it (I > think it is also online). You are missing the linking flag that tells the linker > where the libpq.a and libpq++.a files live. libpq.a and libpq++.a is where those > symbols are defined. > > Ted > > > > -----Original Message----- > From: Arindam Haldar <arindamhaldar@hotpop.com> > To: pgsql-interfaces@postgresql.org, pgsql-general@postgresql.org, > nandrews@investsystems.co.uk > Date: Thu, 16 May 2002 12:23:19 +0530 > Subject: Re: [INTERFACES] C & C ++Program Problem > > >>hi, >>thanx for the hint. am re-entering c programming from DOS world !--my >>apologies as am again a learner. 1 more Query on to this. >>POstgres-7.2 was not configured with-->--with-gnu-ld , which i just saw >>is default set to no... So can that be problem while compling C & C++ >>prorgrames ? >>thanx again in advance for ur help. >>A.H >> >>Nigel J. Andrews wrote: >> >> >>You need to read the error messages. It's not a postgres issue it's a >>linking >>issue. Try giving the -lpq flag to gcc. >> >>On Thu, 16 May 2002, Arindam Haldar wrote: >> >>hi all, >>am trying to use C & C++ libraries with postgresql 7.2. >>while compiling a sample programe(attached) there were thse errors >>encounterd !.. >> >>[arindam@my src]$ >>[arindam@my src]$ gcc egTry.c >>/tmp/ccTLiExh.o: In function `main': >>/tmp/ccTLiExh.o(.text+0x12): undefined reference to `PQconnectdb' >>/tmp/ccTLiExh.o(.text+0x2b): undefined reference to `PQstatus' >>/tmp/ccTLiExh.o(.text+0x5c): undefined reference to `PQerrorMessage' >>/tmp/ccTLiExh.o(.text+0xac): undefined reference to `PQexec' >>/tmp/ccTLiExh.o(.text+0xc5): undefined reference to `PQresultStatus' >>/tmp/ccTLiExh.o(.text+0xf3): undefined reference to `PQclear' >>/tmp/ccTLiExh.o(.text+0x104): undefined reference to `PQfinish' >>/tmp/ccTLiExh.o(.text+0x12e): undefined reference to `PQntuples' >>/tmp/ccTLiExh.o(.text+0x159): undefined reference to `PQgetvalue' >>/tmp/ccTLiExh.o(.text+0x186): undefined reference to `PQclear' >>/tmp/ccTLiExh.o(.text+0x197): undefined reference to `PQfinish' >>collect2: ld returned 1 exit status >>[arindam@my src]$ >> >>lib & include dir are in /usr/lib/pgsql-7.2 & /usr/include/pgsql-7.2. >>i have tried to compliethis programme with RH7.2(with postgres rpm & a >>configured from tar file).. >>i need help pls... i want to use C or C++ >>thanking u in advance >>A.H >> >> >>---------------------------(end of broadcast)--------------------------- >>TIP 1: subscribe and unsubscribe commands go to >> > majordomo@postgresql.org >
On Thu, May 16, 2002 at 04:07:38AM +0530, Arindam Haldar wrote: > hi all, > am trying to use C & C++ libraries with postgresql 7.2. > while compiling a sample programe(attached) there were thse errors > encounterd !.. > > [arindam@my src]$ > [arindam@my src]$ gcc egTry.c Try: gcc egTry.c -lpq (or is it -lpg?) The compiler needs to know which library contains the symbols you're missing. HTH, -- Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/ > Canada, Mexico, and Australia form the Axis of Nations That > Are Actually Quite Nice But Secretly Have Nasty Thoughts About America
Arindam Haldar <arindamhaldar@hotpop.com> writes: > on my RedHat 7.2 i have inserted these lines in the file /etc/ld.so.conf > /usr/lib/pgsql-7.2 This may or may not be necessary, but if you do it you need to run 'ldconfig' in order for it to take effect. > using gcc -lpq egtry.c gives error--> > /usr/bin/ld: cannot find -lpq > collect2: ld reurned 1 exit status You need to add a -L flag to the compile so gcc looks in the right place for libraries. Also, the '-lpq' should go *after* your source file name. So: gcc -o egtry egtry.c -L/usr/lib/pgsql-7.2 -lpq That should get you a lot closer to working. -Doug