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


790

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

$ 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

我该如何解决这个问题?


你能证明你已经安装了pg吗?
thenengah

Answers:


1246

看起来在Ubuntu中,标头是该libpq-dev软件包的一部分(至少在以下Ubuntu版本中: 11.04(Natty Narwhal),10.04(Lucid Lynx),11.10(Oneiric Ocelot),12.04(Precise Pangolin),14.04(Trusty Tahr)和18.04(仿生海狸):

...
/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
在ubuntu 11.04上对我不起作用durrantm@castleLinux2011:~/Dropbox_not_syncd/webs/3/linker$ gem install libpq-dev ERROR: Could not find a valid gem 'libpq-dev' (>= 0) in any repository durrantm@castleLinux2011:~/Dropbox_not_syncd/webs/3/linker$
Michael Durrant

1
如果然后需要安装javascript库,请执行以下操作:gem install'execjs'和gem install'therubyracer'–
Nick Woodhams

@TravisR:感谢您的更新,我只是将其转变为社区Wiki,以使每个人都可以轻松更新它。
亩太短了,

我使用的是Ubuntu 12.10,安装libpq-dev后无法安装pg gem
vedarthk 2013年

2
请修改您的答案以包括apt-get install postgres-server-dev-{pg.version} 在Ubuntu 14.04上的postgresql 9.4中不再使用的答案。请参阅:stackoverflow.com/a/28837453/75194
Ryan Rauh 2015年

168

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

brew install postgresql

然后运行

gem install pg

应该管用。

或者,而不是安装在整个postgresql,你可以brew install libpq和导出正确的PATH,并PKG_CONFIG_PATH在“注意事项”部分的解释


5
如果您还使用Postgres.app,这会引起任何问题吗?
iconoclast 2014年

3
对我来说,跑步后brew install postgressql我可以ARCHFLAGS="-arch x86_64" gem install pg正常运行。
2014年

5
另外,只需brew install libpqxx在Mac OSX上运行就足够了
Ricardo Saporta'1

4
@RicardoSaporta 作为依赖项libpqxx安装postgresql,因此它与brew install postgresql
Troggy

3
无需安装整个组件postgresql,而是可以brew install libpq导出PATHPKG_CONFIG_PATH按照“注意事项”部分中的说明进行导出。
goetzc

118

我也尝试过这样做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
正确,Ruby pg gem包装了Ubuntu / Debian / ... libpq-dev软件包随附的常用PostgreSQL C库。
亩太短了

46

我可以用另一种方式解决这个问题。我没有在系统上找到该库。因此,我使用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的正确位置


2
大卫的解决方案为我工作。我将libpq-fe.h跟踪到'/Applications/Postgres.app/Contents/Versions/9.3/include',并使用带有上述路径的export命令,然后是'gem install pg'和成功安装的gem。
瑞安·斯皮尔斯

感谢您的帮助,为我工作,使用了:export CONFIGURE_ARGS="with-pg-include=/usr/local/Cellar/postgresql/9.3.1/include/"
布鲁克

1
通过在CentOS 6上使用Postgresql 9.3,我通过将pg_*脚本符号链接到$ PATH中来解决了这个问题,如下所示:ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin。我像这样安装了postgres 9.3:yum install http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-redhat93-9.3-1.noarch.rpm && yum install postgresql93 postgresql93-contrib postgresql93-server postgresql93-devel
JoePasq 2015年

1
您也可以写成gem install pg -- with-pg-include=/Library/PostgreSQL/9.1/include/
lfender6445,2015年

更好的是使用export CONFIGURE_ARGS="with-pg-config=/path/to/postgres/bin/pg_config"。该pg_config可执行文件将被调用,以获得所有必需的编译器和连接器选项-你可以自己运行它,看看他们。
skozin

29

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

1
非常有帮助,谢谢。只是要添加有关捆绑软件配置的注释...,您必须以将要运行后续捆绑软件命令的用户身份登录,然后运行此命令。捆绑程序配置文件存储在〜/ .bundle / config中,因此,如果您以root用户身份登录时运行捆绑程序配置文件,则找不到该捆绑程序,但是捆绑程序是由(例如使用capistrano)“部署”用户运行的。
Les Nightingill

3
bundle config build.pg --with-pg-config = / usr / pgsql-9.4 / bin / pg_config在Centos 7上为我解决了我
liloargana

2
捆绑配置build.pg --with-pg-config = / usr / pgsql-10 / bin / pg_config, 如果您使用的是postgresql10
Mahesh Neelakanta,


17

仅作记录:

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

1
如果您使用的是精美的Postgres.app,则效果很好。对于Postgres 10,我使用的是路径/Applications/Postgres.app/Contents/Versions/10/bin/pg_config
鸭子大师课程

13

在Mac OS X上,运行如下:

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

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


1
已投票。我通过EnterpriseDB的grapihcal安装程序安装了Postgresql 。然后,我需要通过找到pg-config路径sudo find / -name "pg_config",然后gem install pg -- --with-pg-config=/Library/PostgreSQL/9.4/bin/pg_config使用刚刚发现的路径进行操作。
曾毅

12

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


10

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

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

这将使您的pggem与已安装的PostgreSQL版本完全同步。在这种情况下,从Homebrew安装某些东西很浪费。


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

资料来源:安装Yum的PostgreSQL 9.3,PostGIS 2.1和pgRouting的几乎白痴的指南


安装库之后...进行清理:“ make distclean”,“ make clean”,“ ./ configure”并开始编译!
mzalazar

8

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

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

你去!


存在“ libpq-dev:/usr/include/postgresql/libpq-fe.h”,而存在“ postgres-xc-server-dev:/usr/include/postgres-xc/server/gtm/libpq-fe.h”不存在 ?我想念什么?
furiabhavesh 2014年

文件内容可能已更改。看起来在postgres -...软件包中有libpq-fe.h的私有副本。无论如何,如果要编译东西,libXXX-dev是您要寻找的。
文森特·福尔蒙德(Finmond Fourmond)2014年

7

对于未安装PostgreSQL服务器的MacOS

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

5

在Mac上,我使用以下代码解决了该问题:

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

4

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

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

第一。然后

bundle install

为我工作。


4

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

ARCHFLAGS="-arch x86_64" gem install pg

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


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...

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


4

我最近升级到了Mac OS X v10.10(Yosemite),但在构建pg gem。

报告的错误是典型的:

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

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


4

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

sudo apt-get install libpq-dev

如果这还不够,请在此sudo apt-get install postgresql之前添加libpq-dev
Alex Poca,

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

2

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

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


2

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

sudo apt-get install libpq-dev

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

bundle install

2

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

$ 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。


您是如何安装postgres的?我将pg_*脚本符号链接到路径中,如下所示:ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin。之后,我不需要任何其他脚本或环境变量。
JoePasq

2

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

$ 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"

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


--之前没有,--with-pg-config=...我会收到一个错误:错误:执行gem ...(OptionParser :: InvalidOption)无效选项:--with-pg-config = / usr / bin / pg_config)
Alexis Wilke,

2

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

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

  1. 找出PostgreSQL的安装位置,然后删除它,

  2. 然后brew install postgresql再次,

  3. brew link postgresql

  4. gem install pg


“ brew link --force postgresql”对我有用,但是因为我必须运行'export PATH =“ / usr/local/opt/postgresql@9.4/bin:$ PATH”'>>〜/ .bash_profile
Jagdish Narayandasani

2

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

我的解决方法是:

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

2

我在Postgresql 9.6中遇到此问题。我能够通过以下方式修复它:

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

2

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

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

1

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

apt-get install postgresql9.5-devel

您还可以使用yum安装特定版本
-yum

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.