Dan*_*iel 4 c database windows postgresql postgresql-9.5
我想在Windows上为PostgreSQL 9.5 64位创建本机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配置有特殊需求,并且接收的测试比大多数情况要轻; 期望更多的构建问题发生.
一个常见的错误是在'make'之前在命令行上指定PG_CONFIG = ...,这不起作用,因为该值随后被makefile的内部工作方式覆盖.
重要的是要知道不同的编译器彼此不兼容.它们每个都有不同的运行时库.因此,除了用于构建您正在使用的软件的编译器之外,使用不同的编译器编译扩展是非常危险的.
Postgresql的Windows构建使用Visual Studio,与EnterpriseDB相同(据我所知).您将需要使用相同的编译器来构建扩展.
(有关更多信息,请参阅:构建和安装PostgreSQL扩展模块和Postgres Enterprise Manager安装指南 - EnterpriseDB(PDF))
这可以解释为什么使用Mingw-w64编译的扩展崩溃.
幸运的是,您可以选择两种解决方案:
使用Microsoft Visual Studio社区.对于个人开发者来说完全免费,但对企业有限制.它应该为Postgresql构建编译适当的模块.
使用Mingw-w64或您选择的任何其他编译器(可能是LLVM/Clang)重建完整的Postgresql二进制文件,然后使用相同的编译扩展.
做其中任何一项都可以帮到你.这也适用于所有平台,语言和其他软件.如果要为软件构建扩展,则需要在用于构建所用软件的同一平台上使用相同的编译器.
因此,如果要在Linux上构建Postgresql的扩展,则需要使用相同的编译器(可能是GCC)来构建扩展.
快乐编码=)