cmake无法在ubuntu上运行

e0uiprwp  于 2022-12-13  发布在  其他
关注(0)|答案(4)|浏览(274)
  • Ubuntu 12.04版
  • C制造2.8.9
  • 邮政数据库

我正在尝试让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,但什么也没找到。我还能尝试什么呢?

eiee3dmh

eiee3dmh1#

确保您已安装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

应该能修好。

s5a0g9ez

s5a0g9ez2#

经过一段时间的调试,我发现它在试图查找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}"
)
0wi1tuuw

0wi1tuuw3#

在Ubuntu上,您也可以通过调用cmake来解决这个问题,其中PostgreSQL_TYPE_INCLUDE_DIR的定义如下:

cmake -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/postgresql/

这个问题和可能的修复方法请参见bug报告[1]。关于Debian邮件列表移动背后的原因请参见[3]。
在Ubuntu/Debian上,从PostgreSQL 9.3开始,头文件pg_type.h被移动到单独的包中(从libpq-dev移动到postgresql-server-dev),因此文件pg_type.h被移动到新位置

oknwwptz

oknwwptz4#

从Linux Mint 17.3(“Rosa”)到PostgreSQL 9.3,我不得不调整伊利亚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}"
)

相关问题