Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
FindPostgreSQL.cmake赢得';我不能在ubuntu上工作 Ubuntu 12.04 CMake 2.8.9 Postgresql 9.2.2_Cmake_Libpq - Fatal编程技术网

FindPostgreSQL.cmake赢得';我不能在ubuntu上工作 Ubuntu 12.04 CMake 2.8.9 Postgresql 9.2.2

FindPostgreSQL.cmake赢得';我不能在ubuntu上工作 Ubuntu 12.04 CMake 2.8.9 Postgresql 9.2.2,cmake,libpq,Cmake,Libpq,我试图让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 (

我试图让
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\u TYPE\u INCLUDE\u DIR
,但没有找到任何东西。我还可以尝试什么?

经过一段时间的调试,我发现在查找
pg\u 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\u后缀

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

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

万一你丢失了一些包裹

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

应该解决这个问题。

在Ubuntu上,您也可以通过调用
cmake
来解决这个问题,并将
PostgreSQL\u TYPE\u INCLUDE\u DIR
定义为:

cmake -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/postgresql/
请参阅错误报告[1]了解此问题和可能的修复方法[2]。Á还可以参见debian邮件列表[3]中关于移动背后原因的讨论

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

  • [1]
  • [2]
  • [3]

这几乎对我有帮助。Cmake运行,但似乎没有正确设置include目录路径。您的源代码找不到
libpq fe.h
,是否存在问题?我对PostgreSQL的问题如此严重感到失望。@johnzachary它对我有用。您的
libpq fe.h
live在哪里?为了帮助其他遇到此问题的人:因为我第一次不理解,只想指出此更改不需要在我们自己的CMake文件中进行,而需要在以下CMake模块中进行:/usr/share/CMake-2.8/Modules/FindPostgreSQL.CMake。在cmake 2.8.9的第119行附近。@Stéphane是的,我应该澄清这一点。对于任何人来说,如果安装了
libpq dev
,但没有
postgresql-server-dev-9.3
为我工作,也会发生此错误。比编辑
.cmake
文件好得多!
cmake -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/postgresql/