我正在努力建立一个。 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,但没有成功。
如何解决这个问题?
答案 0 :(得分:2)
我今天看了一遍,发现它是PostgreSQL包含文件中的一个错误。请参阅this mailing list post。
您可以通过在项目文件的预处理程序指令中明确定义WIN32来解决此问题。
答案 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开发,全天候支持,培训和服务