Sophie

Sophie

distrib > Mandriva > 10.0 > i586 > by-pkgid > db7d48fed1469a51f3fb965d5b5b2ac1 > files > 236

postgresql-docs-7.4.1-2.5.100mdk.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML
><HEAD
><TITLE
>Building libpq Programs</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
REV="MADE"
HREF="mailto:pgsql-docs@postgresql.org"><LINK
REL="HOME"
TITLE="PostgreSQL 7.4.1 Documentation"
HREF="index.html"><LINK
REL="UP"
TITLE="libpq - C Library"
HREF="libpq.html"><LINK
REL="PREVIOUS"
TITLE="Behavior in Threaded Programs"
HREF="libpq-threading.html"><LINK
REL="NEXT"
TITLE="Example Programs"
HREF="libpq-example.html"><LINK
REL="STYLESHEET"
TYPE="text/css"
HREF="stylesheet.css"><META
NAME="creation"
CONTENT="2003-12-22T03:48:47"></HEAD
><BODY
CLASS="SECT1"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="5"
ALIGN="center"
VALIGN="bottom"
>PostgreSQL 7.4.1 Documentation</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="top"
><A
HREF="libpq-threading.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="top"
><A
HREF="libpq.html"
>Fast Backward</A
></TD
><TD
WIDTH="60%"
ALIGN="center"
VALIGN="bottom"
>Chapter 27. <SPAN
CLASS="APPLICATION"
>libpq</SPAN
> - C Library</TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="top"
><A
HREF="libpq.html"
>Fast Forward</A
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="top"
><A
HREF="libpq-example.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="LIBPQ-BUILD"
>27.13. Building <SPAN
CLASS="APPLICATION"
>libpq</SPAN
> Programs</A
></H1
><A
NAME="AEN21930"
></A
><P
>   To build (i.e., compile and link) your <SPAN
CLASS="APPLICATION"
>libpq</SPAN
> programs you need to
   do all of the following things:

   <P
></P
></P><UL
><LI
><P
>      Include the <TT
CLASS="FILENAME"
>libpq-fe.h</TT
> header file:
</P><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libpq-fe.h&gt;</PRE
><P>
      If you failed to do that then you will normally get error
      messages from your compiler similar to
</P><PRE
CLASS="SCREEN"
>foo.c: In function `main':
foo.c:34: `PGconn' undeclared (first use in this function)
foo.c:35: `PGresult' undeclared (first use in this function)
foo.c:54: `CONNECTION_BAD' undeclared (first use in this function)
foo.c:68: `PGRES_COMMAND_OK' undeclared (first use in this function)
foo.c:95: `PGRES_TUPLES_OK' undeclared (first use in this function)</PRE
><P>
     </P
></LI
><LI
><P
>      Point your compiler to the directory where the <SPAN
CLASS="PRODUCTNAME"
>PostgreSQL</SPAN
> header
      files were installed, by supplying the
      <TT
CLASS="LITERAL"
>-I<VAR
CLASS="REPLACEABLE"
>directory</VAR
></TT
> option
      to your compiler.  (In some cases the compiler will look into
      the directory in question by default, so you can omit this
      option.)  For instance, your compile command line could look
      like:
</P><PRE
CLASS="PROGRAMLISTING"
>cc -c -I/usr/local/pgsql/include testprog.c</PRE
><P>
      If you are using makefiles then add the option to the
      <VAR
CLASS="VARNAME"
>CPPFLAGS</VAR
> variable:
</P><PRE
CLASS="PROGRAMLISTING"
>CPPFLAGS += -I/usr/local/pgsql/include</PRE
><P>
     </P
><P
>      If there is any chance that your program might be compiled by
      other users then you should not hardcode the directory location
      like that.  Instead, you can run the utility
      <TT
CLASS="COMMAND"
>pg_config</TT
><A
NAME="AEN21951"
></A
> to find out where the header
      files are on the local system:
</P><PRE
CLASS="SCREEN"
><SAMP
CLASS="PROMPT"
>$</SAMP
> pg_config --includedir
<SAMP
CLASS="COMPUTEROUTPUT"
>/usr/local/include</SAMP
></PRE
><P>
     </P
><P
>      Failure to specify the correct option to the compiler will
      result in an error message such as
</P><PRE
CLASS="SCREEN"
>testlibpq.c:8:22: libpq-fe.h: No such file or directory</PRE
><P>
     </P
></LI
><LI
><P
>      When linking the final program, specify the option
      <TT
CLASS="LITERAL"
>-lpq</TT
> so that the <SPAN
CLASS="APPLICATION"
>libpq</SPAN
> library gets pulled
      in, as well as the option
      <TT
CLASS="LITERAL"
>-L<VAR
CLASS="REPLACEABLE"
>directory</VAR
></TT
> to
      point the compiler to the directory where the <SPAN
CLASS="APPLICATION"
>libpq</SPAN
> library resides.  (Again, the
      compiler will search some directories by default.)  For maximum
      portability, put the <VAR
CLASS="OPTION"
>-L</VAR
> option before the
      <VAR
CLASS="OPTION"
>-lpq</VAR
> option.  For example:
</P><PRE
CLASS="PROGRAMLISTING"
>cc -o testprog testprog1.o testprog2.o -L/usr/local/pgsql/lib -lpq</PRE
><P>
     </P
><P
>      You can find out the library directory using
      <TT
CLASS="COMMAND"
>pg_config</TT
> as well:
</P><PRE
CLASS="SCREEN"
><SAMP
CLASS="PROMPT"
>$</SAMP
> pg_config --libdir
<SAMP
CLASS="COMPUTEROUTPUT"
>/usr/local/pgsql/lib</SAMP
></PRE
><P>
     </P
><P
>      Error messages that point to problems in this area could look
      like the following.
</P><PRE
CLASS="SCREEN"
>testlibpq.o: In function `main':
testlibpq.o(.text+0x60): undefined reference to `PQsetdbLogin'
testlibpq.o(.text+0x71): undefined reference to `PQstatus'
testlibpq.o(.text+0xa4): undefined reference to `PQerrorMessage'</PRE
><P>
      This means you forgot <VAR
CLASS="OPTION"
>-lpq</VAR
>.
</P><PRE
CLASS="SCREEN"
>/usr/bin/ld: cannot find -lpq</PRE
><P>
      This means you forgot the <VAR
CLASS="OPTION"
>-L</VAR
> option or did not specify
      the right directory.
     </P
></LI
></UL
><P>
  </P
><P
>   <A
NAME="AEN21980"
></A
>
   If your codes references the header file
   <TT
CLASS="FILENAME"
>libpq-int.h</TT
> and you refuse to fix your code to
   not use it, starting in <SPAN
CLASS="PRODUCTNAME"
>PostgreSQL</SPAN
> 7.2, this file will be found in
   <TT
CLASS="FILENAME"
><VAR
CLASS="REPLACEABLE"
>includedir</VAR
>/postgresql/internal/libpq-int.h</TT
>,
   so you need to add the appropriate <VAR
CLASS="OPTION"
>-I</VAR
> option to
   your compiler command line.
  </P
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="libpq-threading.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="libpq-example.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Behavior in Threaded Programs</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="libpq.html"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Example Programs</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>