0

を構築しようとしています。dll ファイルを使用して、postgres サーバーを C 関数で拡張します。Visual Studio 2012 を使用して dll をビルドし、PostgreSQL 9.2 を使用しています。すべてのディレクトリ postgres "\include\server*" をインポートしましたが、次のエラーが発生します。

エラー C2011: 'timezone': 'struct' 型の再定義

エラー C2011: 'itimerval': 'struct' 型の再定義

ファイル *pg_confi_os.h* の 205 行目と 214 行目

この解決策を試しましたが、成功しませんでした。

この問題を解決するには?

4

2 に答える 2

2

今日これを調べたところ、これは PostgreSQL インクルード ファイルのバグであることがわかりました。このメーリング リストの投稿を参照してください。

プロジェクト ファイルのプリプロセッサ ディレクティブで WIN32 を明示的に定義することで、この問題を回避できます。

今日のトピックに関する私のブログ投稿を参照してください

于 2014-01-11T09:30:18.420 に答える
1

postgresql チームは私に答えてくれました:

そもそも、VS2012 は (まだ) Postgres のサポートされているビルド環境ではないことに注意してください。http://www.postgresql.org/docs/current/static/install-windows-full.htmlを参照して ください。

乾杯

別の答え:

まず、Visual Studio 2010 以前でビルドする必要があります。Express エディションは正常に動作します。

第 2 に、拡張子 .c ファイルをスタンドアロンでコンパイルできる可能性はほとんどありません。一連のプリプロセッサ定義を設定する必要がありますが、その一部は構成/環境固有のものです。

現時点で拡張機能をコンパイルする最良の方法は、PostgreSQL ソース ツリーを取得し、拡張機能を Makefile を使用して contrib/ ディレクトリ内のフォルダーとして追加し、src/tools/msvc のツールを使用してソース ツリーをコンパイルすることです。拡大。

Windows MSVC ビルド用の PGXS 代替機能を使用して、これが改善されることを本当に望んでいます。私は現在何も認識していませんが、Windows/MSVC でツリーから拡張機能を構築する方法についてはまだ詳しく調査していません。

-- Craig Ringer http://www.2ndQuadrant.com/ PostgreSQL 開発、年中無休 24 時間体制のサポート、トレーニングおよびサービス

于 2013-01-29T12:21:06.887 に答える