错误C2011:’timezone’:’struct’类型重定义(postgres)

我正在努力建立一个。 dll文件用C函数扩展postgres服务器。 我正在使用visual studio 2012构建dll和PostgreSQL 9.2。 我导入所有目录postgres“\ include \ server *”但我有错误:

错误C2011:’timezone’:’struct’类型重新定义

错误C2011:’itimerval’:’struct’类型重新定义

在第205和214行的文件* pg_confi_os.h *中

我试过这个解决方案但没有成功。

如何解决这个问题呢?

我今天看了一遍,发现它是PostgreSQL包含文件中的一个错误。 查看此邮件列表post 。

您可以通过在项目文件的预处理程序指令中显式定义WIN32来解决此问题。

请参阅我今天关于该主题的博文

postgresql团队确实回答了我:

首先,请注意VS2012不是Postgres支持的构建环境。 见http://www.postgresql.org/docs/current/static/install-windows-full.html

干杯

另一个答案是:

首先,您需要使用Visual Studio 2010或更早版本进行构建。 Express版工作正常。

其次,你不可能只编译扩展.c文件。 您需要设置一组预处理器定义,其中一些定义在某种程度上是配置/环境。

目前编译扩展的最佳方法可能是获取PostgreSQL源代码树,使用Makefile将您的扩展名作为文件夹添加到contrib /目录中,然后使用src / tools / msvc中的工具编译源代码树,包括延期。

我真的希望看到这种改进,使用适用于Windows MSVC版本的PGXS替代方案。 我目前还没有意识到任何事情,但我还没有详细研究过Windows / MSVC下的树形扩展。

– Craig Ringer http://www.2ndQuadrant.com/ PostgreSQL开发,全天候支持,培训和服务