编译 Windows PostgreSQL 9.5 64 位 C 语言函数



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

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

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

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

对主要答案的补充

在下面链接的文章中,您可以读到可以使用 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 配置具有特殊需求,并且接受的测试比大多数配置都轻;预计生成问题的发生率更高。

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


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

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

(有关更多信息,请参阅:构建和安装 PostgreSQL 扩展模块和 Postgres Enterprise Manager 安装指南 - EnterpriseDB (PDF))

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

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

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

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

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

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

快乐编码=)

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

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

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

你检查过这个吗?

你也可以阅读其他文档 用MinGW构建PostgreSQL - 也许这对你更有帮助。



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

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



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

您看到了什么样的问题?


也许可以像@Simon Mourier建议的那样检查Visual Studio 2015社区版(不是Express)。

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

对于组织:
组织中无限数量的用户可以将 Visual Studio 社区用于以下方案:在课堂学习环境中、学术研究或参与开源项目。

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

有关更多信息,请参见 Visual Studio 社区许可条款。

最新更新