gpt4 book ai didi

c - PostgreSQL:在 Windows 8 64 位上编译 C 函数

转载 作者:行者123 更新时间:2023-11-30 15:40:44 25 4
gpt4 key购买 nike

我正在学习如何编译 C 触发器以在 PostgreSQL 上加载

编译“trigf.c”时(在 http://www.postgresql.org/docs/9.3/interactive/trigger-example.html 的示例中),我遇到一些与 int64 错误(c.h header )相关的问题

#ifdef HAVE_LONG_INT_64
/* Plain "long int" fits, use it */

#ifndef HAVE_INT64
typedef long int int64;
#endif
#ifndef HAVE_UINT64
typedef unsigned long int uint64;
#endif
#elif defined(HAVE_LONG_LONG_INT_64)
/* We have working support for "long long int", use that */

#ifndef HAVE_INT64
typedef long long int int64;
#endif
#ifndef HAVE_UINT64
typedef unsigned long long int uint64;
#endif
#else
/* neither HAVE_LONG_INT_64 nor HAVE_LONG_LONG_INT_64 */
#error must have a working 64-bit integer datatype
#endif

-> [Error] #error 必须具有有效的 64 位整数数据类型

我不知道如何解决这个问题,因为显然我可以使用一个有效的 64 位整数数据类型。

编辑:我从二进制安装了 pgsql。我用来编译C函数文件的C编译器是MinGW GCC 4.7.2。 (使用Dev-cpp mingw gcc的路径)。

命令行是:gcc -fpic -c "D:\trigf.c"

第一次出现错误,在c.h中:找不到libintl.h(没有这样的文件或目录)。然后我下载 Lib Intl - 0.14.4(本地语言支持库)。安装创建一个文件夹:C:\Program Files (x86)\GnuWin32。我编辑了环境变量CPATH,添加了C:\Program Files (x86)\GnuWin32\include文件夹,其中包含libintl.h。

我再次运行该命令,遇到了上述错误。

最佳答案

更新:事实证明,在 Windows 上使用 MSVC 独立构建扩展并不难。我wrote a blog post detailing the process today .

<小时/>

在 Windows 上构建扩展的常用方法是在工作的 PostgreSQL 构建树中进行。

参见these instructions on the PostgreSQL wiki .

您也许可以使用 MinGW 和 PGXS 来完成此操作使用合适的 Makefile 代替。

仅仅尝试编译独立的 .c 文件不太可能起作用,因为需要多种路径和预处理器定义。

当前的 PostgreSQL 包不包含公共(public)依赖项的 header ,这并没有帮助,这确实相当令人沮丧。即使目标 PostgreSQL 是使用 ENABLE_NLS 构建的,您也可以在不定义 ENABLE_NLS 的情况下安全地编译,在这种情况下,libintl.h 不会需要。

关于c - PostgreSQL:在 Windows 8 64 位上编译 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20865713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com