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

时间:2016-03-15 08:13:30

标签: c database windows postgresql postgresql-9.5

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

我很乐意用MinGW-w64构建它们,如果可能的话,让我的构建链尽可能干净。但我使用的是PostgreSQL的EnterpriseDB版本,而MinGW版本则崩溃了。

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

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

2 个答案:

答案 0 :(得分:5)

除主要答案外

article linked below中,您可以读到可以使用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相同(据我所知)。您需要使用相同的编译器来构建扩展。

(有关详细信息,请参阅:Building and Installing PostgreSQL Extension ModulesPostgres Enterprise Manager Installation Guide - EnterpriseDB (PDF)

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

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

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

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

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

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

    快乐编码=)

答案 1 :(得分:2)

@Swith为您提供文档how to build PostgreSQL Extension Modules with Visual Studio的链接,您可以阅读:

  

使用 MinGW Cygwin编译器为Windows构建时,这些说明也适用。但是,那些 Windows配置有特殊需求并且接收的测试比大多数更轻;期望更多的构建问题发生。

     

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

你看过这个吗?

此外,您还可以阅读其他文档Building PostgreSQL With MinGW - 也许这会对您有所帮助。



  

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

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



  

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

你看到了什么样的问题?


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

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

  

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

     

对于所有其他使用场景:
  在非企业组织中,最多五个用户可以使用Visual Studio社区。在企业组织中(意味着那些年收入超过250台PC或者100万美元),不允许使用超出上述的开源,学术研究和课堂学习环境场景。

有关详细信息,请参阅Visual Studio Community license terms