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

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

$ gem install pgBuilding 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.rbchecking for pg_config... noNo pg_config... trying anyway. If building fails, please try again with--with-pg-config=/path/to/pg_configchecking for libpq-fe.h... noCan't find the 'libpq-fe.h header*** extconf.rb failed ***Could not create Makefile due to some reason, probably lack ofnecessary libraries and/or headers.  Check the mkmf.log file for moredetails.  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_configGem 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

我如何解决这个问题?

389805 次浏览

在Ubuntu中,头部看起来是#0包的一部分(至少在以下Ubuntu版本中:11.04(Natty Narwhal),10.04(Lucid Lynx),11.10(Oneiric Ocelot),12.04(精确穿山甲),14.04(Truust Tahr)和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
  • 对于MacMacPorts PostgreSQL:gem install pg -- --with-pg-config=/opt/local/lib/postgresql[version number]/bin/pg_config
  • 对于OpenSusezypper in postgresql-devel
  • 对于Archlinuxpacman -S postgresql-libs

在我的情况下,它是包postgresql-server-dev-8.4(我在ubuntu 11.04(Natty Narwhal),64位)。

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

多亏了如何为gem安装添加附加路径上的这个链接,我可以使用这个命令将gem指向lib:

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

之后,它就可以工作了,因为它现在知道在哪里可以找到丢失的库。只需将路径替换为您的libpq-fe. h的正确位置

我也尝试过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# orapt-get install postgres-server-dev-{pg.version}# for postgresql 9.4 on Ubuntu 14.04

然后我就可以做

gem install pg

没有问题。

我通过rvm重新安装Ruby修复了同样的错误:

rvm reinstall 1.9.3

我在安装'postgresql-Common'包时解决了这个问题。此包提供了pg_config二进制文件,这很可能是您缺少的。

对于CentOS 6.4,

yum install postgresql-develgem install pg

工作得很好!

对于任何基于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.hpostgres-xc-server-dev: /usr/include/postgres-xc/server/gtm/libpq-fe.h

这就对了!

在FreeBSD(9.1)上,必要的包是 /usr/ports/database/postgresql-server*,安装时还会安装所需的头文件,使“pg”的gem安装失败。这里的答案帮助我找到了解决方案,但包名称的差异需要一些搜索。

希望这能帮助人们在FreeBSD系统上搜索“-dev”包时避免一些头疼!

macOS(之前的macosxosx)上,使用自制安装正确的标头:

brew install postgresql

然后跑

gem install pg

应该工作。

或者,您可以brew install libpq并导出正确的PATHPKG_CONFIG_PATH,而不是安装整个postgresql,如“注意事项”部分所述

在Mac OS X上运行如下:

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

***/path/to/pg_config***是pg_config路径

我有一个类似的问题,这解决了我:

gem install do_postgres -- --with-pgsql-server-dir=/Applications/Postgres.app/Contents/MacOS --with-pgsql-server-include=/Applications/Postgres.app/Contents/MacOS/include/server

来源:

debian 7.0,64位(Wheezy)上,只需运行:

sudo apt-get install libpq-dev

成功安装libpq-dev后,运行:

bundle install

只有卸载(sudo apt-get Purge)libpq-dev并重新安装它对我有用。

在CentOS 6.5(Squeeze)下,我创建了一个文件:

$ sudo touch /etc/profile.d/psql.sh

与内容:

pathmunge /usr/pgsql-9.3/bin

请注意,您应该使用pg_config文件设置PostgreSQL路径。您可以使用命令找到它:

$ sudo find / -iname pg_config

保存文件:

$ sudo chmod +x /etc/profile.d/ruby.sh

并尝试再次执行您的命令。

注意:任何时候你改变Bash配置-改变配置-你应该重新加载Bash。

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

ARCHFLAGS="-arch x86_64" gem install pg

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

osx10.9(小牛队),我brew-installed postgresql,然后我不得不rvm reinstall我的红宝石。我现在很高兴:)

我找到了这个答案,这是唯一一个适合我的答案(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.01 gem installedInstalling 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_configchecking for libpq-fe.h... *** extconf.rb failed ***

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

在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 install pg -- --with-pg-config=/usr/pgsql-x.x/bin/pg_config

对于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安装一些东西是一种浪费。

libpq-fe.h的位置取决于您的PostgreSQL安装的位置(这取决于您安装它的方式)。使用locatehttp://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

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

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

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

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

来源:使用Yum安装PostgreSQL 9.3、PostGIS 2.1和pgRouting的几乎白痴指南

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

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

首先,然后

bundle install

为我工作。

找不到libpq-fe. h标头

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

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

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

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

在OS X和MacPorts上,不再需要PostgreSQL的-devel包。安装pg gem的工作原理如下:

~ > sudo port install postgresql-devel...Error: postgresql-devel has been replaced by postgresql91; please install that port instead~ > gem install pg -v '0.17.1' -- --with-pg-config=/opt/local/lib/postgresql95/bin/pg_config

另见这篇文章

只是为了记录:

带有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

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

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

我终于解决了这个问题,但没有使用前面描述的方法。

使用brew install postgresql,我发现它已经安装,但没有链接。

  1. 找出PostgreSQL安装在哪里,然后删除它,

  2. 再一次brew install postgresql

  3. brew link postgresql

  4. gem install pg

对于AltLinux,必须安装包postgresqlx.x-devel(在我的情况下为postgresql9.5-devel):

apt-get install postgresql9.5-devel

在ArchLinux你需要安装postgreql库

sudo pacman -Syu postgresql-libs

我刚刚在OSX上运行brew和postgres@9.4

我的修复是这样的:

CONFIGURE_ARGS="with-pg-include=/usr/local/opt/postgresql@9.4/include/" bundle install

在Ubuntu上,安装“libpq-dev”以解决此问题。

sudo apt-get install libpq-dev

对于macOS而不安装PostgreSQL服务器:

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

我在PostgreSQL 9.6中遇到了这个问题。我可以通过以下方式修复它:

brew upgrade postgresql@9.6brew link postgresql@9.6 --forcegem install pg

对于Mac OS X,只需安装https://postgresapp.com/并按照命令行部分和ruby的步骤操作

sudo mkdir -p /etc/paths.d &&echo /Applications/Postgres.app/Contents/Versions/latest/bin | sudo tee /etc/paths.d/postgresapp

然后

sudo ARCHFLAGS="-arch x86_64" gem install pg

第1步)确保你的系统中安装了post(如果它已经安装了,你可以在你的机器上运行post server,请转到步骤(2)

apt-get install postgresql postgresql-contrib (sol - fatal error: libpq-fe.h: No such file or directory)sudo apt-get install ruby-dev (required to install postgress below)sudo gem install pgsudo service postgresql restart

步骤2)一些c++文件试图直接访问libpq-fe.h而找不到。所以我们需要手动搜索每个这样的文件并将libpq-fe.h替换为postgresql/libpq-fe.h

在所有dir和subdir中搜索所有出现的libpq-fe.h的命令是grep -rnw ./ -e 'libpq-fe.h'

3)转到步骤2中运行命令列出的所有文件,并手动将libpq-fe.h更改为postgresql/libpq-fe.h

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

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

我的Fedora 30解决方案:

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

我尝试了所有的解决方案,但只能在命令下工作

pip install psycopg2-binary

Ubuntu 20.04.1 LTS,这似乎对我有用:

sudo apt-get install ruby ruby-dev libpqxx-dev libpq-fe-dev libpq-devsudo gem install pg -- --with-pg-config=/usr/include/postgresql/pg_config --with-pg-include=/usr/include/postgresql/

在Fedora 32上,我设法通过专门安装libpq5-devel来解决这个问题。

如果您从官方存储库安装postgresql,您将有多个版本无法解决问题,因此真正的问题是尝试它需要的版本。

在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-devdpkg-deb -R libpq-dev_13.2-1_amd64.deb /tmp/libpq-devsed -i 's|= 13.2-1|= 13.2-1.pgdg20.04+1|' /tmp/libpq-dev/DEBIAN/controldpkg-deb -b /tmp/libpq-dev /tmp/libpq-dev-new.debsudo dpkg -i /tmp/libpq-dev-new.deb

从那以后,我一直在愉快地使用宝石。没有额外的安装或任何东西。

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

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

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

对于高山,请使用下面修复错误

apk add --no-cache postgresql-dev

在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

解决了macosm1

brew install libpq

然后我输入我的PATH

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

还有:

gem install pg