4

我想在 Windows 上为 PostgreSQL 9.5 64bit 创建本机 C 扩展。

如果可能的话,我很想用 MinGW-w64 构建它们,以使我的构建链尽可能干净。但我正在使用 PostgreSQL 的 EnterpriseDB 构建,而 MinGW 构建使它崩溃。

如果我可以在这个商业项目中使用另一个免费的编译器,那也可以。

我知道如何让它与 Visual Studio 2003 Express 一起工作,但由于许可证问题,这似乎不是一个解决方案。

4

2 回答 2

5

除了主要答案

下面链接的文章中,您可以阅读到可以使用 Mingw 或 Cygwin 编写 C 模块,以及一些相关指南。但是我强烈反对这样做,主要是因为下面列出的原因,也因为该页面提到那些 Windows 配置有特殊需求并且比大多数配置接受更轻的测试;预计构建问题的发生率更高

以下是类 Unix 平台的完整摘录:

类 Unix 平台

PGXS 起源于类 Unix 系统,在那里很容易使用。解压扩展模块存档并在生成的目录中运行这些命令:

make PG_CONFIG=path_to_postgresql_installation/bin/pg_config make PG_CONFIG=path_to_postgresql_installation/bin/pg_config install

如果在你的 shell 中运行类型 pg_config 找到正确的 PostgreSQL 安装,你可以忽略 PG_CONFIG 覆盖。根据现有 PostgreSQL 安装目录的所有权,第二个命令通常需要 root 权限。这些说明也适用于使用 MinGW 或 Cygwin 编译器为 Windows 构建时。但是,这些 Windows 配置有特殊需求,并且比大多数配置更容易接受测试;预计构建问题的发生率更高。

一个常见的错误是在“make”之前在命令行上指定 PG_CONFIG=...,这不起作用,因为该值随后被 makefile 的内部工作覆盖。


重要的是要知道不同的编译器彼此不兼容。它们每个都有不同的运行时库。因此,使用不同于用于构建您正在使用的软件的编译器来编译扩展是非常危险的。

Postgresql 的 Windows 构建使用 Visual Studio,与 EnterpriseDB 相同(据我所知)。您将需要使用相同的编译器来构建您的扩展。

(更多信息请参考:构建和安装 PostgreSQL 扩展模块Postgres 企业管理器安装指南 - EnterpriseDB (PDF)

这应该可以解释为什么使用 Mingw-w64 编译的扩展会崩溃。

幸运的是,您可以选择两种解决方案:

  1. 使用Microsoft Visual Studio 社区。它对个人开发者完全免费,但对企业有限制。它应该为您的 Postgresql 构建编译适当的模块。

  2. 使用 Mingw-w64 或您选择的任何其他编译器(可能是 LLVM/Clang)重建完整的 Postgresql 二进制文件,然后使用相同的编译器进行扩展。

执行其中任何一个都应该对您有所帮助。这也适用于所有平台、语言和其他软件。如果要为软件构建扩展,则需要相同的编译器,在用于构建所用软件的同一平台上。

因此,如果您想在 Linux 上为 Postgresql 构建扩展,您需要相同的编译器(可能是 GCC)来构建扩展。

快乐编码 =)

于 2016-05-31T08:41:15.983 回答
2

@Swith 为您提供如何使用 Visual Studio 构建 PostgreSQL 扩展模块的文档链接,您可以阅读:

这些说明也适用于使用 MinGWCygwin编译器为 Windows 构建时。但是,这些Windows 配置有特殊需求,并且比大多数配置更容易接受测试;预计构建问题的发生率更高。

一个常见的错误是在“make”之前在命令行上指定 PG_CONFIG=...,这不起作用,因为该值随后被 makefile 的内部工作覆盖。

你检查过这个吗?

您还可以阅读其他文档Building PostgreSQL With MinGW - 也许这对您有更多帮助。



如果我可以在这个商业项目中使用另一个免费的编译器,那也可以。

您是否检查了 wiki 上的 C 编译器列表 - 特别是,您可以检查Cygwin编译器 - 它在上面的文档中提到并且它是免费的。



我知道如何让它与 Visual Studio 2003 Express 一起工作,但由于许可证问题,这似乎不是一个解决方案。

你看到什么样的问题?


也许像@Simon Mourier 建议的那样检查Visual Studio 2015 Community Edition (不是Express)。

Express 版和社区版之间的许可完全不同 - 我不确定细节,但据我所知,社区版在商业项目中使用更加灵活:

对于组织:组织
内无限数量的用户可以将 Visual Studio Community 用于以下场景:在课堂学习环境中、学术研究或为开源项目做出贡献。

对于所有其他使用场景:
在非企业组织中,最多五个用户可以使用 Visual Studio Community。在企业组织中(即拥有超过 250 台 PC 或年收入超过 100 万美元的组织),除了上述开源、学术研究和课堂学习环境场景之外,不允许使用。

有关详细信息,请参阅Visual Studio 社区许可条款

于 2016-06-04T01:25:27.380 回答