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

时间:2011-05-18 06:11:10

标签: ruby-on-rails ruby-on-rails-3 postgresql rails-postgresql pg

我正在使用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

如何解决这个问题?

44 个答案:

答案 0 :(得分:1121)

在Ubuntu中,标题是libpq-dev package的一部分(至少在以下Ubuntu版本中: 11.04(Natty Narwhal),10.04(Lucid Lynx),11.10(Oneiric Ocelot),12.04(精确穿山甲),14.04(Trusty Tahr)和18.04(Bionic Beaver)):

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

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

  • 对于Ubuntu / Debian系统:sudo apt-get install libpq-dev
  • Red Hat Linux(RHEL)系统上:yum install postgresql-devel
  • 适用于Mac Homebrewbrew install postgresql
  • 对于Mac MacPorts PostgreSQL:gem install pg -- --with-pg-config=/opt/local/lib/postgresql[version number]/bin/pg_config
  • OpenSusezypper in postgresql-devel
  • ArchLinuxpacman -S postgresql-libs

答案 1 :(得分:146)

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

brew install postgresql

然后运行

gem install pg

应该有用。

或者,您可以postgresql而不是安装整个brew install libpq,并按照“警告”部分中的说明导出正确的PATHPKG_CONFIG_PATH

答案 2 :(得分:115)

我还尝试过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

没有问题。

答案 3 :(得分:44)

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

感谢how to add an additional path for gem installation上的这个链接,我可以用这个命令将gem指向lib:

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

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

的正确位置即可

答案 4 :(得分:27)

  

找不到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

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

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

答案 5 :(得分:23)

CentOS 6.4,

yum install postgresql-devel
gem install pg

运作良好!

答案 6 :(得分:15)

仅供记录:

使用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

答案 7 :(得分:12)

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

答案 8 :(得分:12)

在Mac OS X上运行如下:

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

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

答案 9 :(得分:11)

使用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安装东西是一种浪费。

答案 10 :(得分:9)

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

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

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

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

来源: An almost idiot's guide to install PostgreSQL 9.3, PostGIS 2.1 and pgRouting with Yum

答案 11 :(得分:7)

任何基于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

你去吧!

答案 12 :(得分:4)

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

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

答案 13 :(得分:4)

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

ARCHFLAGS="-arch x86_64" gem install pg

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

答案 14 :(得分:4)

我找到了这个答案,它是唯一一个对我有用的(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...

请参阅Stack Overflow问题 Can't find the PostgreSQL client library (libpq)

答案 15 :(得分:4)

我最近升级到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以获取我之前安装的最新版本的软件包。

答案 16 :(得分:4)

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

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

答案 17 :(得分:3)

在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

答案 18 :(得分:3)

我正在Mac上运行Postgres.app而我必须

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

第一。然后

bundle install

为我工作。

答案 19 :(得分:2)

Debian 7.0,64位(Wheezy)上,运行:

sudo apt-get install libpq-dev

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

bundle install

答案 20 :(得分:2)

在 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

在那之后我一直很高兴地使用宝石。没有额外的安装或任何东西。

答案 21 :(得分:2)

我在Postgresql 9.6中遇到过这个问题。我能够通过以下方式解决这个问题:

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

答案 22 :(得分:2)

在Ubuntu上,安装" libpq-dev"摆脱这个问题。

dev.eve-stuff.com

答案 23 :(得分:2)

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

我的解决方法是:

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

答案 24 :(得分:2)

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

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

  1. 找出PostgreSQL的安装位置,并将其删除,

  2. 然后再次brew install postgresql

  3. brew link postgresql

  4. gem install pg

答案 25 :(得分:2)

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

bin目录(包含pg_config)将与include目录位于同一目录中。如错误所示,使用--with-pg-config选项安装gem:

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

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

答案 26 :(得分:2)

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

希望这可以帮助有人在FreeBSD系统上搜索“-dev”软件包时避免一些头痛!

答案 27 :(得分:2)

在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配置 - 更改profile.d配置 - 您应该重新加载Bash。

答案 28 :(得分:1)

我解决了安装'postgresql-common'软件包的问题。这个包提供了pg_config二进制文件,这很可能是你缺少的。

答案 29 :(得分:1)

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

apt-get install postgresql9.5-devel

答案 30 :(得分:1)

我遇到了类似的问题,这为我解决了这个问题:

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

来源:

https://gist.github.com/oisin/6562181

答案 31 :(得分:1)

OS X 10.9(小牛队),我brew-installed postgresql,然后我必须rvm reinstall我的Ruby。我现在很高兴:)

答案 32 :(得分:1)

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

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

答案 33 :(得分:1)

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

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

答案 34 :(得分:0)

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

答案 35 :(得分:0)

只是缺少libpq-fe.h

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

以上命令将安装一个新包 libpq-dev,之后您可以再次执行 bundle install 以继续安装包。

答案 36 :(得分:0)

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

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

答案 37 :(得分:0)

我尝试了所有解决方案,但只能在命令下使用

pip install psycopg2-binary

答案 38 :(得分:0)

我对Fedora 30的解决方案:

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

答案 39 :(得分:0)

步骤1)确保在您的系统中安装了postgress(如果已经安装了postgress并且您可以在您的机器上运行postgress服务器,请转到步骤(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 pg
sudo service postgresql restart

步骤2)有些c ++文件试图直接访问libpq-fe.h而无法找到。因此,我们需要手动搜索每个此类文件,并将libpq-fe.h替换为postgresql/libpq-fe.h

在所有目录和子目录中搜索libpq-fe.h的所有匹配项的命令为grep -rnw ./ -e 'libpq-fe.h'

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

答案 40 :(得分:0)

对于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

答案 41 :(得分:0)

在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

另见this post

答案 42 :(得分:0)

在Arch Linux上,您需要安装postgresql-libs

sudo pacman -Syu postgresql-libs

答案 43 :(得分:-1)

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

rvm reinstall 1.9.3
相关问题