libpqプログラムの構築

PostgreSQL 8.4.1文書
前のページ | 巻戻し | 第 30章libpq - C ライブラリ | 早送り | 次のページ

# 30.19. libpqプログラムの構築

libpqを使用するプログラムの構築(つまり、コンパイルとリンク)を行うためには、以下を全て実施する必要があります。

- `libpq-fe.h`ヘッダファイルをインクルードします。

      #include <libpq-fe.h>

  これを忘れると、通常コンパイラから以下のようなエラーメッセージが発生します。

      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)

- コンパイラに`-I`directory``オプションを付与することで、コンパイラにPostgreSQLヘッダファイルをインストールしたディレクトリを通知します。 (デフォルトでこのディレクトリを検索するコンパイラもあります。その場合はこのオプションを省くことができます。) 例えば、以下のようなコンパイルコマンドになります。

      cc -c -I/usr/local/pgsql/include testprog.c

  Makefileを使用しているのであれば、`CPPFLAGS`変数にこのオプションを追加してください。

      CPPFLAGS += -I/usr/local/pgsql/include

  他のユーザがそのプログラムをコンパイルする可能性がある場合は、上のようにディレクトリの場所を直接書き込むべきではありません。 その代わりに`pg_config`ユーティリティを実行して、各システムにおけるヘッダファイルの在処を検索させることができます。

      $ pg_config --includedir
      /usr/local/include

  正確なオプションを指定できなかった結果、コンパイラは以下のようなエラーメッセージを生成します。

      testlibpq.c:8:22: libpq-fe.h: No such file or directory

- 最終的なプログラムのリンク時、`-lpq`オプションを指定して、libpqライブラリを組み込んでください。 同時に`-L`directory``オプションを指定して、コンパイラにlibpqライブラリの在処を通知してください。 (繰り返しますが、コンパイラはデフォルトでいくつかのディレクトリを検索します。) 移植性を最大にするために、`-lpq`オプションの前に`-L`を記述してください。 以下に例を示します。

      cc -o testprog testprog1.o testprog2.o -L/usr/local/pgsql/lib -lpq

  同様に`pg_config`を使用してライブラリのあるディレクトリを見つけることもできます。

      $ pg_config --libdir
      /usr/local/pgsql/lib

  この部分で問題があった場合のエラーメッセージは以下のようなものになります。

      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'

  これは`-lpq`の付け忘れを示します。

      /usr/bin/ld: cannot find -lpq

  これは`-L`の付け忘れ、あるいは、ディレクトリ指定の間違いを示します。

前のページ | ホーム | 次のページ
スレッド化プログラムの振舞い | 上に戻る | サンプルプログラム