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

时间:2013-01-26 15:58:39

标签: c visual-studio postgresql visual-studio-2012

我正在努力建立一个。 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 *中

我试过solution,但没有成功。

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我今天看了一遍,发现它是PostgreSQL包含文件中的一个错误。请参阅this mailing list post

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

请参阅my blog post on the topic today

答案 1 :(得分:1)

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下的树形扩展。

     

-    克雷格林格http://www.2ndQuadrant.com/   PostgreSQL开发,全天候支持,培训和服务