◆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のソースをダウンロード &解凍してコンパイルします。
./configure --without-zlib [リターン] make [リターン]を実行してください。
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を コピーしてください。