◆VC++ 2005環境での PostgreSQL - C言語関数開発(番外編)

<PostgreSQL 8.2以前のpostgres.libファイルの作成>
(ソースコードからのPostgreSQL構築)

[ 上へ ]

・MinGW/MSYS

C言語開発する場合各APIを使いますが、多くはpostgres.exeに依存してます。 利用するために当然ライブラリファイル(libファイル)をリンクしなければなりませんが、 ここでも書きましたが8.2系以前の Windowsバイナリ版にはありません。ないということはLoadLibrary & GetProcAddressで 関数へのポインタを取得して実行するしかないですが(やったことないので出来るかどうかは わかりません)、大量の関数へのポインタを取得するのはとても現実的ではないです。それでは 作るしかないのですが、それには、実行ファイルpostgres.exeとdefファイルpostgres.defが必要に なります。これを得るにはソースをダウンロードしてコンパイルするしかないです。

ドキュメントにはVC++とUnix系(8.3系)での手順が書いてありますが、 VC++では追加のツールも必要ですし、PostgreSQLがもともとUnix系プラットフォームで 使われてきたものですから、以下のツールでWindows上でUnixコマンドでコンパイルします。

MinGW-5.1.4.exe
http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=240780&release_id=595197

MSYS-1.0.10.exe
http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=24963

上記をダウンロードできたら
http://www.geocities.jp/katayama_hirofumi_mz/win32/mingw.htm
を参考にインストールしてください。

PostgreSQL 8.2.5以前のコンパイルをする方は以下(mingw-runtime-3.9.tar.gz)を ダウンロードしてください。
Download MinGW - Minimalist GNU for Windows

・postgres.libファイルの作成

次にPostgreSQLのソースをダウンロード &解凍してコンパイルします。

  1. PostgreSQLのソースを以下からダウンロードしてください。
    http://www.postgresql.jp/PostgreSQL
  2. TAR形式の圧縮ファイルを解凍できるユーティリティを使って先ほどインストールしたMSysの以下の フォルダにTARファイルを解凍してください。
    C:\MSys\1.0\home\xxxx\ (xxxxはログイン名なのでExplorerなどでパスを確認してください。)
  3. PostgreSQL 8.2.5以前をコンパイルする場合
    前項でMinGWをインストール際に mingw-runtime-3.9.tar.gzを解凍してできた include/sysにあるtime.h とインストールしたC:\MinGW\inlucde\sys\time.hを差し替えないと 次のmakeができないかもしれないです。
  4. MSysを起動しプロンプトから
    ./configure  --without-zlib   [リターン]
    make                          [リターン]
    
    を実行してください。
  5. C:\Msys\1.0\home\xxx\PostgreSQL-8.x.x/src/backendpostgres.exepostgres.defができているので、CDでカレントを移動して
    lib.exe /MACHINE:x86 /NAME:postgres.exe /DEF:postgres.def
    
    を実行するとpostgres.libができます。

・PostgreSQLへの組み込み

postgres.libライブラリファイルをC:\Program Files\PostgreSQL\8.x\libあたりに コピーして、あとはVC++側でこのファイルをリンクすればよさそうですが最後の問題があります。

コピーしたpostgres.libに対応する実行ファイルは現在稼動している
C:\Program Files\PostgreSQL\8.x\bin\postgres.exeではなく、コンパイルした
C:\Msys\1.0\home\xxx\PostgreSQL-8.x.x/src/backendにあるpostgres.exeです。
ですから 現在のpostgres.exeとソースからコンパイルしたpostgers.exeを差し替えなければなりません。

もし、そのまま使用したらVC++側のC言語関数はビルドできますが、 それを使用した瞬間にサーバがフリーズします。

サーバが稼動していたら一旦停止して、 C:\Program Files\〜〜のpostgres_BAK.exeなどと名前を変更して、コンパイルしたpostgres.exeを コピーしてください。