To build (i.e., compile and link) a program using <application>libpq</application> you need to do all of the following things: libpqを使用するプログラムの構築(つまり、コンパイルとリンク)を行うためには、以下をすべて実施する必要があります。
Include the <filename>libpq-fe.h</filename> header file:
libpq-fe.h
ヘッダファイルをインクルードします。
#include <libpq-fe.h>
If you failed to do that then you will normally get error messages from your compiler similar to: これを忘れると、通常コンパイラから以下のようなエラーメッセージが発生します。
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)
Point your compiler to the directory where the <productname>PostgreSQL</productname> header
files were installed, by supplying the
<literal>-I<replaceable>directory</replaceable></literal> 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:
コンパイラに-I
オプションを付与することで、コンパイラにPostgreSQLヘッダファイルをインストールしたディレクトリを通知します。
(デフォルトでこのディレクトリを検索するコンパイラもあります。
その場合はこのオプションを省くことができます。)
例えば、以下のようなコンパイルコマンドになります。
directory
cc -c -I/usr/local/pgsql/include testprog.c
If you are using makefiles then add the option to the
<varname>CPPFLAGS</varname> variable:
Makefileを使用しているのであれば、CPPFLAGS
変数にこのオプションを追加してください。
CPPFLAGS += -I/usr/local/pgsql/include
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
<command>pg_config</command><indexterm><primary>pg_config</primary><secondary
sortas="libpq">with libpq</secondary></indexterm> to find out where the header
files are on the local system:
他のユーザがそのプログラムをコンパイルする可能性がある場合は、上のようにディレクトリの場所を直接書き込むべきではありません。
その代わりにpg_config
ユーティリティを実行して、各システムにおけるヘッダファイルの在処を検索させることができます。
$
pg_config --includedir/usr/local/include
If you
have <command>pkg-config</command><indexterm><primary>pkg-config</primary><secondary sortas="libpq">with
libpq</secondary></indexterm> installed, you can run instead:
もしも、pkg-config
がインストールされている場合、代わりとして以下を実行します。
$
pkg-config --cflags libpq-I/usr/local/include
Note that this will already include the <option>-I</option> in front of
the path.
これは既にパスの最前部で-I
が含まれていることに注意してください。
Failure to specify the correct option to the compiler will result in an error message such as: 正確なオプションを指定できなかった結果、コンパイラは以下のようなエラーメッセージを生成します。
testlibpq.c:8:22: libpq-fe.h: No such file or directory
When linking the final program, specify the option
<literal>-lpq</literal> so that the <application>libpq</application>
library gets pulled in, as well as the option
<literal>-L<replaceable>directory</replaceable></literal> to point
the compiler to the directory where the
<application>libpq</application> library resides. (Again, the
compiler will search some directories by default.) For maximum
portability, put the <option>-L</option> option before the
<option>-lpq</option> option. For example:
最終的なプログラムのリンク時、-lpq
オプションを指定して、libpqライブラリを組み込んでください。
同時に-L
オプションを指定して、コンパイラにlibpqライブラリの在処を通知してください。
(繰り返しますが、コンパイラはデフォルトでいくつかのディレクトリを検索します。)
移植性を最大にするために、directory
-lpq
オプションの前に-L
を記述してください。
以下に例を示します。
cc -o testprog testprog1.o testprog2.o -L/usr/local/pgsql/lib -lpq
You can find out the library directory using
<command>pg_config</command> as well:
同様にpg_config
を使用してライブラリのあるディレクトリを見つけることもできます。
$
pg_config --libdir/usr/local/pgsql/lib
Or again use <command>pkg-config</command>:
さもなくば、この場合もやはりpkg-config
を使用します。
$
pkg-config --libs libpq-L/usr/local/pgsql/lib -lpq
Note again that this prints the full options, not only the path. 重ねて、これはパスのみならず全てのオプションを表示することに注意してください。
Error messages that point to problems in this area could look like the following: この部分で問題があった場合のエラーメッセージは以下のようなものになります。
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'
This means you forgot <option>-lpq</option>.
これは-lpq
の付け忘れを示します。
/usr/bin/ld: cannot find -lpq
This means you forgot the <option>-L</option> option or did not
specify the right directory.
これは-L
の付け忘れ、あるいは、ディレクトリ指定の間違いを示します。