Ruby on rails - 尝试安装 pg gem 时找不到 'libpq-fe.h 标头



我正在使用Ruby on Rails 3.1预版本。我喜欢使用PostgreSQL,但问题是安装pg gem。它给了我以下错误:

$ gem install pg
Building native extensions.  This could take a while...
ERROR:  Error installing pg:
    ERROR: Failed to build gem native extension.
        /home/u/.rvm/rubies/ruby-1.9.2-p0/bin/ruby extconf.rb
checking for pg_config... no
No pg_config... trying anyway. If building fails, please try again with
 --with-pg-config=/path/to/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.
Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/home/u/.rvm/rubies/ruby-1.9.2-p0/bin/ruby
    --with-pg
    --without-pg
    --with-pg-dir
    --without-pg-dir
    --with-pg-include
    --without-pg-include=${pg-dir}/include
    --with-pg-lib
    --without-pg-lib=${pg-dir}/lib
    --with-pg-config
    --without-pg-config
    --with-pg_config
    --without-pg_config
    Gem files will remain installed in /home/u/.rvm/gems/ruby-1.9.2-p0/gems/pg-0.11.0 for inspection.
    Results logged to /home/u/.rvm/gems/ruby-1.9.2-p0/gems/pg-0.11.0/ext/gem_make.out

如何解决此问题?

看起来在 Ubuntu

中,标头是 libpq-dev 包的一部分(至少在以下 Ubuntu 版本中是这样:11.04(独角鲸)、10.04(清醒猞猁)、11.10(奥涅里克豹猫)、12.04(精确穿山甲)、14.04(可信塔尔)和18.04(仿生海狸)):

...
/usr/include/postgresql/libpq-fe.h
...

因此,请尝试为您的操作系统安装 libpq-dev 或其等效版本:

  • 对于 Ubuntu/Debian 系统:sudo apt-get install libpq-dev
  • 在红帽 Linux (RHEL) 系统上:yum install postgresql-devel
  • 对于Mac自制软件:brew install postgresql
  • 对于Mac MacPorts PostgreSQL:gem install pg -- --with-pg-config=/opt/local/lib/postgresql[version number]/bin/pg_config
  • 对于 OpenSuse:zypper in postgresql-devel
  • 对于 ArchLinux:pacman -S postgresql-libs

macOS(以前称为 Mac OS X 和 OS X)上,使用 Homebrew 安装正确的标头:

brew install postgresql

然后运行

gem install pg

应该工作。

或者,您可以按照"注意事项"部分的说明brew install libpq并导出正确的PATHPKG_CONFIG_PATH,而不是安装整个postgresql

我也尝试过做gem install libpq-dev,但我收到这个错误:

Can't find the 'libpq-fe.h header
*** extconf.rb failed ***

但是,我发现使用sudo apt-get安装(我尽量避免与Ruby on Rails一起使用)有效,即

sudo apt-get install libpq-dev
# or
apt-get install postgres-server-dev-{pg.version}
# for postgresql 9.4 on Ubuntu 14.04

然后我能够做到

gem install pg

没有问题。

我可以用另一种方式解决这个问题。我在系统上找不到该库。因此,我使用PostgreSQL主网站上的应用程序安装了它。就我而言(OS X),安装结束后,我在/Library/PostgreSQL/9.1/include/下找到了该文件。如果您已经安装了PostgreSQL,则还可以将该文件放在其他地方,具体取决于您的系统。

感谢这个关于如何为 gem 安装添加额外路径的链接,我可以使用以下命令将 gem 指向库:

export CONFIGURE_ARGS="with-pg-include=/Library/PostgreSQL/9.1/include/"
gem install pg

之后,它可以工作,因为它现在知道在哪里可以找到丢失的库。只需将路径替换为 libpq-fe.h<</p>

div class="one_answers" 的正确位置>

找不到 libpq-fe.h 标头

我在 CentOS 7.0.1406 上运行以下命令取得了成功:

~ % psql --version # => psql (PostgreSQL) 9.4.1
yum install libpqxx-devel
gem install pg -- --with-pg-config=/usr/pgsql-9.4/bin/pg_config

或者,您可以将捆绑器配置为始终使用这些选项安装pg(有助于在部署环境中运行捆绑器),

  • bundle config build.pg --with-pg-config=/usr/pgsql-9.4/bin/pg_config

对于 CentOS 6.4,

yum install postgresql-devel
gem install pg

效果很好!

仅供记录:

带有PostgresApp的OS X中的Ruby on Rails 4应用程序(在这种情况下需要0.17.1版本 - 有点像旧项目):

gem install pg -v '0.17.1' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_config

这只是缺少libpq-fe.h的问题

在 ubuntu 上,我们只需要运行: sudo apt-get install libpq-dev

上面的命令将安装一个新的软件包libpq-dev之后您可以再次执行bundle install以恢复捆绑安装。

在 Mac OS X 上,运行方式如下:

gem install pg -- --with-pg-config=***/path/to/pg_config***

***/path/to/pg_config***是通往pg_config的途径

就我而言,它是包postgresql-server-dev-8.4(我在 Ubuntu 11.04(Natty Narwhal)上,64 位)。

对于不安装 PostgreSQL 服务器的 MacOS

brew install libpq
gem install pg -- --with-pg-config="/usr/local/Cellar/libpq/9.6.6/bin/pg_config"

我对 Fedora 30 的解决方案:

sudo dnf install /usr/include/libpq-fe.h

对于使用 Postgres.app 的 Mac 用户来说,正确的答案是针对该软件包提供的libpq进行构建。例如,对于 9.4 版本(截至撰写本文时的最新版本),您所需要的只是:

export CONFIGURE_ARGS="with-pg-include=/Applications/Postgres.app/Contents/Versions/9.4/include"
gem install pg

这将使您的pg gem与您安装的PostgreSQL版本完全同步。在这种情况下,从Homebrew安装东西是一种浪费。

我在 Amazon Linux 上遇到了同样的问题。我可以找到标题libpq-fe.h,但不知何故它不起作用。

它来自通过计算机上的不同用户安装的不同版本的软件包。安装了PostgreSQL 9.2和PostgreSQL 9.3。因此,在包含库之前,请确保您的PostgreSQL版本。

对我来说,神奇的命令行是:

sudo yum install postgresql93 postgresql93-server postgresql93-libs postgresql93-contrib postgresql93-devel

来源:一个近乎白痴的指南,用于安装 PostgreSQL 9.3、PostGIS 2.1 和 pgRouting with Yum

任何基于 Debian 的发行版(包括 Ubuntu)的更一般的答案如下。首先,安装以 root 身份运行的 apt-file 软件包:

apt-get install apt-file

这允许您搜索包含文件的包。然后,使用

apt-file update

(这可以以普通用户身份运行)。然后,使用以下方法查找缺少的标头:

apt-file search libpq-fe.h

在我的机器上,这给出了:

libpq-dev: /usr/include/postgresql/libpq-fe.h
postgres-xc-server-dev: /usr/include/postgres-xc/server/gtm/libpq-fe.h

给你!

在 Ubuntu 上,安装 "libpq-dev" 来解决这个问题。

sudo apt-get install libpq-dev

在 Fedora 32 上,我设法通过专门安装 libpq5-devel 解决了同样的问题。

如果您从官方存储库安装 postgresql,您将有几个版本无法解决问题,因此尝试它需要哪一个版本实际上是一个问题。

在 debian 靶心上,现有的答案都没有为我解决问题。

如果它可以帮助与我的配置相同的人:

  1. 使用 PostgreSQL 的 apt 存储库:https://wiki.postgresql.org/wiki/Apt
  2. sudo apt-get update && sudo apt-get dist-upgrade(将 PostgreSQL 从 v13 升级到 v14)
  3. sudo apt-get install libpq-dev
  4. gem install pgbundle install

我在Postgresql 9.6中遇到了这个问题。我能够通过执行以下操作来修复它:

brew upgrade postgresql@9.6
brew link postgresql@9.6 --force
gem install pg

我在 Mac OS 上遇到了同样的问题,但我通过在终端中使用以下命令轻松安装了 PostgreSQL gem:

ARCHFLAGS="-arch x86_64" gem install pg

(我首先用brew install postgresql安装了PostgreSQL。

我找到了这个答案,它是唯一对我有用的答案(Mac OS) - 经过大约两天的研究:

$ sudo su
$ env ARCHFLAGS="-arch x86_64" gem install pg
Building native extensions.  This could take a while...
Successfully installed pg-0.11.0
1 gem installed
Installing ri documentation for pg-0.11.0...
Installing RDoc documentation for pg-0.11.0...

请参阅堆栈溢出问题找不到 PostgreSQL 客户端库 (libpq)。

我最近升级到Mac OS X v10.10(优胜美地),并且在构建pg宝石时遇到了困难。

报告的错误是典型的:

Using config values from /usr/local/bin/pg_config
checking for libpq-fe.h... *** extconf.rb failed ***

我的解决方案是gem uninstall pg,然后bundle update pg用最新的宝石替换宝石。我确实在 Yosemite 安装后运行了brew update; brew upgrade以获取我以前安装的软件包的最新版本。

在Mac上,我使用以下代码解决了它:

gem install pg -v '0.18.4' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.4/bin/pg_config

我在Mac上运行 Postgres.app,我不得不

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.4/bin

第一。然后

bundle install

为我工作。

我在通过 asdf 安装的 postgres 时遇到了同样的错误。pg-config解决方案对我不起作用。相反,我必须找到包含该文件的 postgres 包含文件夹并使用 --with-pg-include 标志运行命令

gem install pg -- --with-pg-include=/<path>/.asdf/installs/postgres/<version>/include

在 CentOS 上,我使用以下命令安装了libpq-dev package

yum install postgresql-devel

执行gem install pg返回与" No pg_config... trying anyway. If building fails, please try again with --with-pg-config=/path/to/pg_config "相同的错误。

按如下方式安装 gem 解决了我的问题

gem install pg -- --with-pg-config=/usr/pgsql-x.x/bin/pg_config

libpq-fe.h的位置取决于PostgreSQL安装的位置(这取决于你的安装方式)。使用locate (http://en.wikipedia.org/wiki/Locate_%28Unix%29) 在计算机上查找libpq-fe.h文件。如果存在,它将位于 PostgreSQL 安装的include目录中。

$ locate libpq-fe.h
/Library/PostgreSQL/9.1/include/libpq-fe.h

包含 pg_configbin 目录将与include目录位于同一目录中。正如错误所暗示的那样,使用 --with-pg-config 选项来安装 gem:

$ gem install pg --with-pg-config="/Library/PostgreSQL/9.1/bin/pg_config"

请注意,如果您从未使用过locate或者自安装 PostgreSQL 以来没有更新,则可能需要运行updatedb

在 Ubuntu 20.04 上,我已经有了 libpq5:amd64 版本 13.2-1.pgdg20.04+1。现在,当我尝试从apt存储库安装libpq-dev时,我收到了

The following packages have unmet dependencies:
libpq-dev : Depends: libpq5 (= 12.6-0ubuntu0.20.04.1) but 13.2-1.pgdg20.04+1 is to be installed

我从http://ftp.us.debian.org/debian/pool/main/p/postgresql-13/libpq-dev_13.2-1_amd64.deb中抢过deb并做了以下操作:

mkdir -p /tmp/libpq-dev
dpkg-deb -R libpq-dev_13.2-1_amd64.deb /tmp/libpq-dev
sed -i 's|= 13.2-1|= 13.2-1.pgdg20.04+1|' /tmp/libpq-dev/DEBIAN/control
dpkg-deb -b /tmp/libpq-dev /tmp/libpq-dev-new.deb
sudo dpkg -i /tmp/libpq-dev-new.deb

在那之后,我一直在愉快地使用宝石。无需额外安装或任何东西。

对于高山,请使用以下命令修复错误

apk add --no-cache postgresql-dev

MacOS M1 上解决:

brew install libpq

然后我输入我的路径

echo 'export PATH="/opt/homebrew/opt/libpq/bin:$PATH"' >> ~/.zshrc

和:

gem install pg

相关内容

  • 没有找到相关文章

最新更新