]> begriffs open source - ai-pg/blob - full-docs/src/sgml/html/libpq-build.html
PG 18 docs from https://ftp.postgresql.org/pub/source/v18.0/postgresql-18.0-docs...
[ai-pg] / full-docs / src / sgml / html / libpq-build.html
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>32.22. Building libpq Programs</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /><link rev="made" href="pgsql-docs@lists.postgresql.org" /><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><link rel="prev" href="libpq-threading.html" title="32.21. Behavior in Threaded Programs" /><link rel="next" href="libpq-example.html" title="32.23. Example Programs" /></head><body id="docContent" class="container-fluid col-10"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="5" align="center">32.22. Building <span class="application">libpq</span> Programs</th></tr><tr><td width="10%" align="left"><a accesskey="p" href="libpq-threading.html" title="32.21. Behavior in Threaded Programs">Prev</a> </td><td width="10%" align="left"><a accesskey="u" href="libpq.html" title="Chapter 32. libpq — C Library">Up</a></td><th width="60%" align="center">Chapter 32. <span class="application">libpq</span> — C Library</th><td width="10%" align="right"><a accesskey="h" href="index.html" title="PostgreSQL 18.0 Documentation">Home</a></td><td width="10%" align="right"> <a accesskey="n" href="libpq-example.html" title="32.23. Example Programs">Next</a></td></tr></table><hr /></div><div class="sect1" id="LIBPQ-BUILD"><div class="titlepage"><div><div><h2 class="title" style="clear: both">32.22. Building <span class="application">libpq</span> Programs <a href="#LIBPQ-BUILD" class="id_link">#</a></h2></div></div></div><a id="id-1.7.3.29.2" class="indexterm"></a><p>
3    To build (i.e., compile and link) a program using
4    <span class="application">libpq</span> you need to do all of the following
5    things:
6
7    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
8       Include the <code class="filename">libpq-fe.h</code> header file:
9 </p><pre class="programlisting">
10 #include &lt;libpq-fe.h&gt;
11 </pre><p>
12       If you failed to do that then you will normally get error messages
13       from your compiler similar to:
14 </p><pre class="screen">
15 foo.c: In function `main':
16 foo.c:34: `PGconn' undeclared (first use in this function)
17 foo.c:35: `PGresult' undeclared (first use in this function)
18 foo.c:54: `CONNECTION_BAD' undeclared (first use in this function)
19 foo.c:68: `PGRES_COMMAND_OK' undeclared (first use in this function)
20 foo.c:95: `PGRES_TUPLES_OK' undeclared (first use in this function)
21 </pre><p>
22      </p></li><li class="listitem"><p>
23       Point your compiler to the directory where the <span class="productname">PostgreSQL</span> header
24       files were installed, by supplying the
25       <code class="literal">-I<em class="replaceable"><code>directory</code></em></code> option
26       to your compiler.  (In some cases the compiler will look into
27       the directory in question by default, so you can omit this
28       option.)  For instance, your compile command line could look
29       like:
30 </p><pre class="programlisting">
31 cc -c -I/usr/local/pgsql/include testprog.c
32 </pre><p>
33       If you are using makefiles then add the option to the
34       <code class="varname">CPPFLAGS</code> variable:
35 </p><pre class="programlisting">
36 CPPFLAGS += -I/usr/local/pgsql/include
37 </pre><p>
38      </p><p>
39       If there is any chance that your program might be compiled by
40       other users then you should not hardcode the directory location
41       like that.  Instead, you can run the utility
42       <code class="command">pg_config</code><a id="id-1.7.3.29.3.2.2.2.2" class="indexterm"></a> to find out where the header
43       files are on the local system:
44 </p><pre class="screen">
45 <code class="prompt">$</code> pg_config --includedir
46 <code class="computeroutput">/usr/local/include</code>
47 </pre><p>
48      </p><p>
49       If you
50       have <code class="command">pkg-config</code><a id="id-1.7.3.29.3.2.2.3.2" class="indexterm"></a> installed, you can run instead:
51 </p><pre class="screen">
52 <code class="prompt">$</code> pkg-config --cflags libpq
53 <code class="computeroutput">-I/usr/local/include</code>
54 </pre><p>
55       Note that this will already include the <code class="option">-I</code> in front of
56       the path.
57      </p><p>
58       Failure to specify the correct option to the compiler will
59       result in an error message such as:
60 </p><pre class="screen">
61 testlibpq.c:8:22: libpq-fe.h: No such file or directory
62 </pre><p>
63      </p></li><li class="listitem"><p>
64       When linking the final program, specify the option
65       <code class="literal">-lpq</code> so that the <span class="application">libpq</span>
66       library gets pulled in, as well as the option
67       <code class="literal">-L<em class="replaceable"><code>directory</code></em></code> to point
68       the compiler to the directory where the
69       <span class="application">libpq</span> library resides.  (Again, the
70       compiler will search some directories by default.)  For maximum
71       portability, put the <code class="option">-L</code> option before the
72       <code class="option">-lpq</code> option.  For example:
73 </p><pre class="programlisting">
74 cc -o testprog testprog1.o testprog2.o -L/usr/local/pgsql/lib -lpq
75 </pre><p>
76      </p><p>
77       You can find out the library directory using
78       <code class="command">pg_config</code> as well:
79 </p><pre class="screen">
80 <code class="prompt">$</code> pg_config --libdir
81 <code class="computeroutput">/usr/local/pgsql/lib</code>
82 </pre><p>
83      </p><p>
84       Or again use <code class="command">pkg-config</code>:
85 </p><pre class="screen">
86 <code class="prompt">$</code> pkg-config --libs libpq
87 <code class="computeroutput">-L/usr/local/pgsql/lib -lpq</code>
88 </pre><p>
89       Note again that this prints the full options, not only the path.
90      </p><p>
91       Error messages that point to problems in this area could look like
92       the following:
93 </p><pre class="screen">
94 testlibpq.o: In function `main':
95 testlibpq.o(.text+0x60): undefined reference to `PQsetdbLogin'
96 testlibpq.o(.text+0x71): undefined reference to `PQstatus'
97 testlibpq.o(.text+0xa4): undefined reference to `PQerrorMessage'
98 </pre><p>
99       This means you forgot <code class="option">-lpq</code>.
100 </p><pre class="screen">
101 /usr/bin/ld: cannot find -lpq
102 </pre><p>
103       This means you forgot the <code class="option">-L</code> option or did not
104       specify the right directory.
105      </p></li></ul></div><p>
106   </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="libpq-threading.html" title="32.21. Behavior in Threaded Programs">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="libpq.html" title="Chapter 32. libpq — C Library">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="libpq-example.html" title="32.23. Example Programs">Next</a></td></tr><tr><td width="40%" align="left" valign="top">32.21. Behavior in Threaded Programs </td><td width="20%" align="center"><a accesskey="h" href="index.html" title="PostgreSQL 18.0 Documentation">Home</a></td><td width="40%" align="right" valign="top"> 32.23. Example Programs</td></tr></table></div></body></html>