【问题标题】:FindPostgreSQL.cmake won't work on ubuntuFindPostgreSQL.cmake 无法在 ubuntu 上运行
【发布时间】:2017-10-08 23:58:20
【问题描述】:
  • Ubuntu 12.04
  • CMake 2.8.9
  • Postgresql 9.2.2

我正在尝试让FindPostgreSQL 模块找到/usr/include/postgresql/libpq-fe.h

这是我在CMakeLists.txt 中的内容:

find_package(PostgreSQL REQUIRED)

这是我得到的错误:

CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (MESSAGE):
  Could NOT find PostgreSQL (missing: PostgreSQL_TYPE_INCLUDE_DIR) (found
  version "9.2.2")
Call Stack (most recent call first):
  /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:288 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-2.8/Modules/FindPostgreSQL.cmake:155 (find_package_handle_standard_args)
  CMakeLists.txt:7 (find_package)

我在调用 find_package 之前添加了以下几行,但它似乎没有任何效果。

set(PostgreSQL_ADDITIONAL_VERSIONS "9.2.2")
set(PostgreSQL_ADDITIONAL_SEARCH_PATHS ${PostgreSQL_ADDITIONAL_SEARCH_PATHS} "/usr/include/postgresql")

我也尝试用谷歌搜索PostgreSQL_TYPE_INCLUDE_DIR,但没有找到任何东西。我还能尝试什么?

【问题讨论】:

  • 对于遇到此错误的任何人,当您安装了libpq-dev 但未安装postgresql-server-dev-9.3 时也会发生此错误

标签: cmake libpq


【解决方案1】:

确保您已安装 libpq-dev\postgresql-server-dev-all(或特定版本,例如 postgresql-server-dev-9.4

$ dpkg --get-selections | grep -e "libpq-dev\|postgresql-server-dev"

如果你丢失了一些包裹

apt-get install libpq-dev postgresql-server-dev-all

应该修复它。

【讨论】:

  • 为我工作。比编辑.cmake 文件要好得多!
  • 就是这样。谢谢!
【解决方案2】:

经过更多调试后,我发现尝试查找 pg_type.h 时卡住了

此文件位于/usr/include/postgresql/catalog/pg_types.h,但模块希望在/usr/include/postgresql/server/catalog/pg_types.h 中找到它

find_path(PostgreSQL_TYPE_INCLUDE_DIR
  NAMES catalog/pg_type.h
  PATHS
   # Look in other places.
   ${PostgreSQL_ROOT_DIRECTORIES}
  PATH_SUFFIXES
    pgsql/server
    postgresql/server
    include/server
  # Help the user find it if we cannot.
  DOC "The ${PostgreSQL_INCLUDE_DIR_MESSAGE}"
)

如果我将postgresql 添加到PATH_SUFFIXES,它会起作用

find_path(PostgreSQL_TYPE_INCLUDE_DIR
  NAMES catalog/pg_type.h
  PATHS
   # Look in other places.
   ${PostgreSQL_ROOT_DIRECTORIES}
  PATH_SUFFIXES
    postgresql
    pgsql/server
    postgresql/server
    include/server
  # Help the user find it if we cannot.
  DOC "The ${PostgreSQL_INCLUDE_DIR_MESSAGE}"
)

【讨论】:

  • 这几乎对我有帮助。 Cmake 运行,但似乎没有正确设置包含目录路径。您是否遇到源代码找不到libpq-fe.h 的问题?我很失望 PostgreSQL 这么有问题。
  • @johnzachary 它对我有用。你的libpq-fe.h住在哪里?
  • 为了帮助其他人遇到这个问题:由于我一开始不明白,只是想指出这个更改不需要在我们自己的 CMake 文件中,而是在以下 CMake 模块中:/usr/共享/cmake-2.8/Modules/FindPostgreSQL.cmake。 cmake 2.8.9 的第 119 行左右。
  • @Stéphane 是的,我应该澄清一下。
【解决方案3】:

在 Ubuntu 上,您还可以通过调用 cmake 来解决该问题,并将 PostgreSQL_TYPE_INCLUDE_DIR 定义如下:

cmake -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/postgresql/

请参阅错误报告 [1] 了解此问题和可能的修复 [2]。 Á 还可以在 [3] 上查看有关 debian 邮件列表中移动背后原因的讨论。

在 Ubuntu/Debian 上,从 PostgreSQL 9.3 开始,头文件 pg_type.h 移动到一个单独的包(从libpq-devpostgresql-server-dev) 因此文件pg_type.h 被移动到一个新位置

【讨论】:

    【解决方案4】:

    从带有 PostgreSQL 9.3 的 Linux Mint 17.3(“Rosa”)开始,我不得不调整 ilia choly 的解决方案(有趣的是,列表中建议的 postgres 条目已经存在于文件中,但不足以修复问题)。

    我必须在第 114 行附近编辑 /usr/share/cmake-2.8/Modules/FindPostgreSQL.cmake 并添加 postgresql/9.3 以便 find_path 调用看起来像

    find_path(PostgreSQL_TYPE_INCLUDE_DIR
      NAMES catalog/pg_type.h
      PATHS
       # Look in other places.
       ${PostgreSQL_ROOT_DIRECTORIES}
      PATH_SUFFIXES
        postgresql/9.3
        postgresql
        pgsql/server
        postgresql/server
        include/server
      # Help the user find it if we cannot.
      DOC "The ${PostgreSQL_INCLUDE_DIR_MESSAGE}"
    )
    

    【讨论】:

      猜你喜欢
      • 2012-09-27
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-03
      • 2017-03-14
      • 2014-06-14
      相关资源
      最近更新 更多