1

必要なのは、MinGWにPostgresと通信させることだけです。私はいくつかのオプションを検討しました:

  1. libpqを使用します。Postgres for Windowsに付属しているlibpq.libリンクは問題ありませんが、ライブラリを使用するとクラッシュします。VC++用にコンパイルされたからだと思います。libpqコードだけが見つからないため、MinGWでPostgresツリー全体を再コンパイルする必要があります。簡単ではありません。
  2. libpqxxを使用します。libpqが必要です!
  3. libodbcxxを使用します。iodbcのような何らかのODBCマネージャーが必要です。たぶん私はiodbcを直接使うことができます。これは今のところWindowsだけなので、リンカーで-lodbcを使用して、Windows固有のコマンドを使用できますか?

オプション1は最も痛みが少ないように聞こえます。プロジェクトがPostgresを使用することはかなり確信していますが、プロジェクトがWindows上にとどまるかどうかはあまりわかりません。この機能を取得する簡単な方法はありますか?

4

3 に答える 3

4

必要に応じて、libpqだけを再構築できます。「./configure」を実行してから、src / interfaces/libpqで「make」を実行します。

しかし実際には、msvcで構築されたlibpqはmingwで問題なく動作するはずです。これは単なる標準のWindowsDLLです。.libに問題がある可能性がありますが、DLLは問題ないはずです。ちなみに、PQtrace()機能のみが機能しなくなります。MSVCRTの動作方法が原因で、まったく同じバージョンのランタイムがある場合にのみ機能します。

.LIBが機能しない場合は、DLLから直接インポートライブラリを生成することもできます。または、MingWではDLLに直接リンクすることもできますか?彼らのwikiを参照してください

libpqを機能させることは、odbcよりもはるかに簡単です。

于 2009-08-30T08:30:12.133 に答える
1

ここでもRの質問をしたので、ソースからRパッケージを読み取ることができると思います。RPostgreSQLパッケージは、まさにあなたが求めていることを実行します。

  • Windows上のすべてのRバイナリとパッケージはMinGWで構築されているため、MinGWを使用します
  • libpqにリンクしてPostgresと通信します

src/Makevars.winファイルには単純に

PKG_CPPFLAGS=-I"${PG_HOME}"/include
PKG_LIBS=-L"${PG_HOME}"/lib -llibpq

これは、PgヘッダーとライブラリがどこにあるかをRに通知し、libpqとリンクします。

于 2009-08-30T15:56:50.700 に答える
1

補足...PostgresファイルをコンパイルおよびリンクするためのCXXFLAGSおよびLDFLAGSは、Makefileの次の変数を使用して簡単にセットアップできます。

CXXFLAGS += -I$(shell pg_config --includedir)
LDFLAGS += -L$(shell pg_config --libdir) -llibpq

(システムのPATHにPostgreSQLインストールのpg_config.exeを含むbinフォルダーが含まれていて、mingw32-makeを使用している場合。)

于 2009-08-30T18:07:44.523 に答える