【问题标题】:example.c:1:22: fatal error: postgres.h: No such file or directoryexample.c:1:22:致命错误:postgres.h:没有这样的文件或目录
【发布时间】:2020-09-06 17:12:47
【问题描述】:

我正在尝试在 postgres 中创建自己的函数(使用 C),为此我引用了这个文档:http://www.linuxgazette.cz/139/peterson.html

用于编译 - 我指的是:第 33.9.6 节。但是,当我运行以下命令时:

   cc -fpic -c example.c

我收到此错误:

   example.c:1:22: fatal error: postgres.h: No such file or directory
 #include "postgres.h"
                  ^
compilation terminated.

我还安装了 postgresql-server-dev-all 包并尝试使用此链接中提供的解决方案:How to fix 'postgres.h' file not found problem?

没有什么对我有用。请让我知道如何拥有 postgres.h 文件。 我在 centos -7 上使用 postgres-12。

【问题讨论】:

  • 您提到的第 33.9.6 节适用于版本 8.2,该版本已经过 EOL。当前部分是37.10.5。它有:cc -fPIC -c foo.c。我不是 C 程序员,所以我不确定更改为 PIC 意味着什么。
  • 感谢您的建议。但是,即使更换了外壳 - 它对我不起作用。

标签: postgresql compilation


【解决方案1】:

首先:如果您没有从源代码安装 PostgreSQL,请确保已安装标头,它们位于 -devel 包中。

如果安装了头文件后问题仍然存在,原因是你忘记告诉编译器在哪里寻找头文件:

cc -fpic -I /location/of/postgres/include -c example.c

要查找该位置,您可以使用pg_config

pg_config --includedir

有一个类似的--libdir 选项可以在您链接可执行文件时显示库路径。

【讨论】:

  • 非常感谢您为我提供这些有用的信息。对我来说,这条路径是:/usr/include。我通过您提供的带有头文件路径的第一个命令运行了编译命令,但又遇到了同样的错误。但是,当我走到这条路时:/usr/include。并搜索 postgres.h 的头文件 - 我没有得到任何东西。我在那里看到许多其他 .h 头文件。我正在使用的包有什么问题吗?
  • 如果您使用的是 PGDG 软件包,则该路径将是 /usr/pgsql-12/include。你从来没有说过你正在使用什么包。您也可能安装了多个 PostgreSQL。在不了解细节的情况下,很难给出更具体的建议。
  • 抱歉,请您帮我确定我使用的是什么包。我知道如何检查版本,版本是 12.4
  • 那就是rpm -qa | grep postgres。但是请参阅我的更新答案;也许您只是忘记安装标头。
【解决方案2】:

对于 ubuntu:apt-get -y install postgresql-server-dev-13apt-get -y install postgresql-13 之后

【讨论】:

    猜你喜欢
    • 2018-07-11
    • 2020-08-15
    • 1970-01-01
    • 2017-05-09
    • 2021-05-15
    • 2014-10-31
    • 2022-01-11
    • 2021-09-19
    相关资源
    最近更新 更多