0

我正在尝试构建一个。dll 文件以使用 C 函数扩展 postgres 服务器。我正在使用 Visual Studio 2012 来构建 dll 和 PostgreSQL 9.2。我导入了所有目录 postgres "\include\server*" 但我遇到了错误:

错误 C2011:“时区”:“结构”类型重新定义

错误 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 版工作正常。

其次,您不太可能单独编译扩展名 .c 文件。您需要设置一堆预处理器定义,其中一些是特定于配置/环境的。

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

我真的很想看到这种改进,使用适用于 Windows MSVC 构建的 PGXS 替代方案。我目前不知道任何事情,但我还没有详细研究在 Windows/MSVC 下从树中构建扩展。

-- Craig Ringer http://www.2ndQuadrant.com/ PostgreSQL 开发、24x7 支持、培训和服务

于 2013-01-29T12:21:06.887 回答