【问题标题】:Compilation of Postgresql using pycparser- header files not found使用 pycparser 编译 Postgresql - 找不到头文件
【发布时间】:2018-10-25 17:36:27
【问题描述】:

我已经安装了解析 C 代码的 pycparser。

使用 pycparser 我想解析一个开源项目,即 PostgreSQL(version-11.0)。我使用 Visual Studio Express 2017 编译器套件构建了它。但是在编译过程中找不到一些头文件,即windows.hwinsock2.h

在查看构建PostgreSQL的目录结构时,我发现它没有这些头文件。如何解决这个问题?

还发生了一个奇怪的错误:

postgresql/src/include/c.h:363:2: error: #error 必须有一个工作 64位整数数据类型

注意:我使用的是 Windows 10 64 位平台和 postgresql-11.0

步骤如下:
我下载了 Visual Studio 2017、Windows-10 SDK、Active Perl,如在 PostgreSQL 中从源代码构建的步骤中所述。

之后,我打开 Visual Studio 的开发人员命令提示符并导航到文件夹 postgresql-11.0/src/tools/msvc

使用命令“build”来构建 postgresql。构建过程成功,但在PostgreSQL的目录结构中仍然找不到windows.hwinsock2.h

【问题讨论】:

  • 请描述您用于构建 PostgreSQL 的确切步骤。 windows.hwinsock2.h 应由 MSVC 提供。 MSVC 构建过程应将pg_config.h.win32 复制到pg_config.h,以便定义HAVE_LONG_LONG_INT_64。您一定错过了该步骤,否则您将不会收到该错误消息。
  • 我已经编辑了我的问题并提到了我构建 postgresql 所遵循的步骤
  • 我已经看到了这两个文件,即 pg_config.h.win32 和 pg_config.h。这两个文件都是彼此的精确副本。我仍然收到此错误消息。
  • 正如我在回答中所说,您必须教这个 pycparser 才能找到它们。请注意,PostgreSQL 仅支持 GNU make,因此您需要自行处理。
  • 先生,我已经成功地教 pycparser 找到这些文件,即 windows.h 和 winsock2.h。仍然存在的错误是:: postgresql/src/include/c.h:363:2: error: #error must have a working 64-bit integer datatype

标签: postgresql pycparser


【解决方案1】:

我不知道pycparser,但你的问题可能有两个方面:

  1. 您没有为 pycparser 提供正确的包含目录列表。您提到的头文件不是PostgreSQL的一部分。

    也许您可以从 Visual Studio 提示符的环境中获取该列表。我这里没有 Windows 来验证这一点。

  2. 错误消息表示HAVE_LONG_INT_64HAVE_LONG_LONG_INT_64 均未定义。

    现在在 MSVC 安装过程中复制到 pg_config.hpg_config.h.win32 具有以下内容:

    #if (_MSC_VER > 1200)
    #define HAVE_LONG_LONG_INT_64 1
    #endif
    

    由于您没有使用 MSVC,因此您可能没有设置 _MSC_VER,这会导致错误。

    你可以定义_MSC_VER,然后看看你是否可以构建。

基本上你在这里处于一个紧张的位置,因为 pycparser 不是一个受支持的构建过程,所以你必须深入挖掘源代码并随时修复问题。如果不了解 PostgreSQL 源代码和构建过程,您可能不会走得太远。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多