找不到PostgreSQL客户端库(libpq)


146

我正在尝试在Mac OS X 10.6上安装PostgreSQL for Rails。首先,我尝试了MacPorts安装,但是运行不顺利,所以我做了一键式DMG安装。这似乎可行。

我怀疑我需要安装PostgreSQL开发软件包,但是我不知道如何在OS X上进行安装。

这是我尝试做时得到的sudo gem install pg

$ sudo gem install pg
Building native extensions.  This could take a while...
ERROR:  Error installing pg:
    ERROR: Failed to build gem native extension.

        /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
checking for pg_config... yes
Using config values from /Library/PostgreSQL/8.3/bin/pg_config
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.h... yes
checking for PQconnectdb() in -lpq... no
checking for PQconnectdb() in -llibpq... no
checking for PQconnectdb() in -lms/libpq... no
Can't find the PostgreSQL client library (libpq)
*** 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=/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/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
    --with-pqlib
    --without-pqlib
    --with-libpqlib
    --without-libpqlib
    --with-ms/libpqlib
    --without-ms/libpqlib


Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/pg-0.11.0 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/pg-0.11.0/ext/gem_make.out

您是否安装了PostgreSQL的8.3版本,还是选择了旧版本?如果是8.3,则库应该位于/Library/PostgreSQL/8.3/lib中,请检查是否存在。
Eelke 2011年

我做了8.3版,是的,看起来所有东西都在那里。
詹森·斯威特

您可以发布输出pg_config吗?那应该使我们更容易提供帮助。
justis 2011年

我不得不添加的版本-v“0.14.0”,使其与万亩项目合作
马蒂厄Rouif

Answers:


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

工作了!


2
我必须添加版本“ env ARCHFLAGS =“-arch x86_64” gem install -v'0.14.0'“,这样它才能与我的项目一起使用
Matthieu Rouif 2013年

6
为OS X Mavericks工作。对我来说是env ARCHFLAGS="-arch x86_64" gem install pg -v '0.17.1' -- --with-pg-config=/opt/local/lib/postgresql91/bin/pg_config
Dawei Yang

17
如果您在特立独行的情况下使用“ Postgres.app”,则应执行以下操作:env ARCHFLAGS =“-arch x86_64 gem install pg---with-pg-config = / Applications / Postgres.app / Contents / Versions / 9.3 / bin / pg_config(假设您使用的是Postgres.app版本9.3,因为使用不同版本的pg_config的位置可能会更改,但是无论如何您都可以找到它)
Zhaonan 2014年

2
这为我工作,并中断了2个小时的停工。我是Rails的新手,这很令人沮丧。像以前的评论者一样,我在Mavericks上使用Postgres.app安装程序。没有意识到ARCHFLGS env变量是如此重要。 在这里解释。
GNat 2014年

3
问题是,为什么这样做有效?什么是“ARCHFLAGS =?” -拱x86_64"的做,为什么不香草创业板安装工作,它不应该是这个棘手安装一个宝石。
贾里德梅纳尔

78

我在这里尝试了评价最高的答案:

env ARCHFLAGS="-arch x86_64" gem install pg

但是当我尝试再次运行捆绑安装时,它出现了相同的错误。然后,我尝试使用ARCHFLAGS安装整个捆绑软件,如下所示:

ARCHFLAGS="-arch x86_64" bundle install

为我工作!确保根据您所拥有的体系结构用i386替换x86_64。


2
非常感谢。这对我有用。我一直在尝试解决此问题已有一个多小时,而现在的代码正是它的作用-ARCHFLAGS =“-arch x86_64”捆绑安装
piratetone

@piratetone在这里的加入对我来说在High Sierra上是
有用的

赞赏@Christine,它的工作对我来说在高塞拉利昂
Ymow武

31

使用EnterpiseDB .dmg时遇到了这个问题。如果您使用的是相同的想法,则可以通过指定正确的体系结构来使其工作:

sudo env ARCHFLAGS="-arch i386" gem install pg

网络上有一些教程指定了不同的体系结构(例如,使用MacPorts的用户使用“ -arch x86_64”),但是它对我不起作用,因为我使用了单个文件安装。


6
x86_64为我工作(Mac OS 10.6.8,通过自制软件安装PostgreSQL:mxcl.github.com/homebrew
chesterbr

2
已经花了几个小时来找到解决方案,而您的工作已经完成,bobfet1&@chester。谢谢!:-)))** sudo env ARCHFLAGS =“-arch x86_64” gem install pg **
rassom 2012年

24

如果使用优胜美地:

brew install postgres

然后:

ARCHFLAGS="-arch x86_64" gem install pg

最后(可选),如果您要启动自动真空...

postgres -D /usr/local/var/postgres

21

也许您可以尝试以下一种方法:

ARCHFLAGS="-arch i386 -arch x86_64" gem install pg

要了解您的图书馆的架构,您可以使用

file /usr/local/lib/libpq.dylib 

在我的案例中,仅给出了一种架构(通过自制软件安装):

/usr/local/lib/libpq.dylib: Mach-O 64-bit dynamically linked shared library x86_64

+1感谢您提供有关了解我的图书馆是哪种架构的提示!
秒杀事件2012年

还要检查红宝石二进制文件的体系结构。
Leopd 2012年

18

解决方案:用Homebrew重新安装了PostgreSQL。


1
恭喜!请记住将赏金奖励给某人。即使不是最终的解决方案,也有少数人尽力提供帮助,而当您提供​​赏金时,声誉点已经花光了。
justis 2011年

2
不知道为什么为什么得到-1,而其他方法都不起作用时对我
有用

我最终也不得不使用ARCHFLAGS方法,但是直到用homebrew重新安装postresql之后它才起作用。
Dave Cowart

为优胜美地(10.10.3)工作。brew安装PostgreSQL
roosevelt

这对我不起作用。不知道这是否与我使用“内置” Ruby(我认为)而不是其他任何东西有关:
rogerdpack

6

gem通过在适当的环境变量前添加前缀来伪装。如果您是从MacPorts安装的,则应该能够完成以下过程:

% /opt/local/lib/postgresql91/bin/pg_config
BINDIR = /opt/local/lib/postgresql91/bin
DOCDIR = /opt/local/share/doc/postgresql
HTMLDIR = /opt/local/share/doc/postgresql
INCLUDEDIR = /opt/local/include/postgresql91
PKGINCLUDEDIR = /opt/local/include/postgresql91
INCLUDEDIR-SERVER = /opt/local/include/postgresql91/server
LIBDIR = /opt/local/lib/postgresql91
PKGLIBDIR = /opt/local/lib/postgresql91
LOCALEDIR = /opt/local/share/locale
MANDIR = /opt/local/share/man
SHAREDIR = /opt/local/share/postgresql91
SYSCONFDIR = /opt/local/etc/postgresql91
PGXS = /opt/local/lib/postgresql91/pgxs/src/makefiles/pgxs.mk
CONFIGURE = '--prefix=/opt/local' '--sysconfdir=/opt/local/etc/postgresql91' '--bindir=/opt/local/lib/postgresql91/bin' '--libdir=/opt/local/lib/postgresql91' '--includedir=/opt/local/include/postgresql91' '--datadir=/opt/local/share/postgresql91' '--mandir=/opt/local/share/man' '--with-includes=/opt/local/include' '--with-libraries=/opt/local/lib' '--with-openssl' '--with-bonjour' '--with-readline' '--with-zlib' '--with-libxml' '--with-libxslt' '--enable-thread-safety' '--enable-integer-datetimes' '--with-ossp-uuid' 'CC=/usr/bin/gcc-4.2' 'CFLAGS=-pipe -O2 -arch x86_64' 'LDFLAGS=-L/opt/local/lib -arch x86_64' 'CPPFLAGS=-I/opt/local/include -I/opt/local/include/ossp'
CC = /usr/bin/gcc-4.2
CPPFLAGS = -I/opt/local/include -I/opt/local/include/ossp -I/opt/local/include/libxml2 -I/opt/local/include
CFLAGS = -pipe -O2 -arch x86_64 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv
CFLAGS_SL = 
LDFLAGS = -L/opt/local/lib -arch x86_64 -L/opt/local/lib -L/opt/local/lib -Wl,-dead_strip_dylibs
LDFLAGS_EX = 
LDFLAGS_SL = 
LIBS = -lpgport -lxslt -lxml2 -lssl -lcrypto -lz -lreadline -lm 
VERSION = PostgreSQL 9.1beta1

从那里,拔出LIBDIRINCLUDEDIRCPPFLAGSLIBSLDFLAGS(对,我认为将让你运行一个LIBDIR,不过)。然后,您将运行:

setenv PATH /opt/local/lib/postgresql91/bin:${PATH}
sudo env LDFLAGS=-L`pg_config --libdir` CPPFLAGS=`pg_config --cppflags` gem install pg

那应该为你做。让我知道是否可以。


我使用的是一键式安装程序,而不是MacPorts for PostgreSQL。我不知道等效命令是什么。
詹森·斯威特

看看您是否对此感到幸运(我认为Mac的updatedb脚本在周六晚上运行):locate pg_config
Sean

我还是不知道这意味着什么(CPPFLAGS或者LDFLAGS,我不知道这些是什么意思)。
詹森·斯威特

哦,但是locate pg_config确实给我看了一些东西。我尝试仅通过MacPorts安装PostgreSQL并使用您的命令-不起作用。
詹森·斯威特

1
更新了上面的示例。我相信这将解决您的问题。问题LDFLAGS是没有设置到包含的目录libpq。有关详情,请参见上文。
肖恩

5

我们遇到的问题很奇怪。

ruby -v # was ok (rbenv)
gem -v # was ok (rbenv)

但实际上,当我们进行捆绑安装时,并未为rbenv安装的ruby版本安装捆绑器,因此,当我们键入捆绑安装时,它将使用系统的捆绑器。

因此,在运行捆绑安装之前,请确保已通过运行以下方式安装了捆绑程序

gem install bundler

就我而言,这是可行的(新的macOS High Sierra,使用rbenv并主要通过brew安装)。捆绑包可能使用的是苹果的东西,这就是问题所在……
saza

3

我认为您不需要postgres开发文件,安装程序中应该已经包含了您需要的所有内容。它们的安装路径很可能不在您的环境路径中,因此gem在尝试编译pg时找不到它们。

您不必以gem install pgroot 身份运行,实际上,如果这样做,则您的PATH(如果使用sudo运行,则为root的PATH)可能不会包含必要的信息。

以下通常适用于我:

# Might be different depending on where your installer installed postgres 8.3
export PATH=$PATH:/Library/PostgreSQL/8.3/include/
export ARCHFLAGS='-arch x86_64'
gem install pg

运行gem install pg(以及您之前的两个命令)而不是sudo gem install pg给出完全相同的结果。
杰森·斯威特

您使用的是32位还是64位体系结构?您是否尝试过使用其他体系结构标记进行上述操作?另外,您/Library/PostgreSQL/...是否将Postgres安装副本的位置更改为正确的位置?
Brett Bender

查看了有关执行列出的命令的注释。看起来我是通过sudo port install postgresql83 postgresql83-server来安装Postgres的,类似于以下说明:flux88.com/2010/06/installing-postgresql-for-rails-on-mac-os-x。看来独立安装程序是32位的,所以即使您的计算机是64位的,您也想将arch标志设置为32位。如果无法正常使用,建议您通过MacPorts卸载并重新安装,然后尝试上述说明。希望有帮助!
Brett Bender

3

这是最终为我完成的工作(结合之前提供的多个解决方案以及其他帖子):

$ sudo env ARCHFLAGS =“-arch x86_64” gem install pg-with-pg-include = / Library / PostgreSQL / 9.6 / include /


上面的解决方案在Mac OS High Sierra中为我工作sudo env ARCHFLAGS =“-arch x86_64” gem install pg -v'1.1.2'-with-pg-include = / usr / local / Cellar / postgresql / 10.5 / include找到包含文件夹的确切路径,并相应地进行更新。
maniempire

1

ARCHFLAGS如果您以某种方式最终使用64位版本的postgres(将安装自制软件)和32位版本的ruby,则其他人提出的答案将不起作用。由于某种原因,我rbenv坚持将ruby 1.9.2-p290构建为32位,这使得无法与64位postgres链接。

使用以下命令检查红宝石二进制文件的体系结构

file `which ruby`

或者如果使用rbenv

file `rbenv which ruby`

并与您的postgres进行比较:

file `which postgres`

如果不匹配,则需要重新安装postgres或ruby。使用rbenv,我只需要切换到其他版本即可解决此问题:1.9.3-p194而不是1.9.2-p290


1

这就是我在Mavericks上工作的方式。注意:我已经从自制软件安装了postgresql 9.3。

  1. 从App Store将Xcode更新到5.0

  2. 安装命令行开发人员工具

    xcode-select-安装

  3. 同意Xcode许可

    须藤xcodebuild -license

  4. 安装宝石

    ARCHFLAGS =“-arch x86_64” gem install pg



0

我可能在这里参加聚会有点晚,但就我而言,我正在使用rbenv并升级到Ruby 2.2.3。我必须安装Bundler才能正常工作,我使用的是旧系统版本。

gem install bundler


0

如上所述,这与在rbenv上拥有两个红宝石拱门有关/usr/bin/ruby: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [i386:Mach-O executable i386],我要做的就是简单地安装要将此命令使用的pggem force x86_64拱门:

sudo env ARCHFLAGS="-arch x86_64" gem install pg

记住要保持bash_profile最新

添加您的postgres的路径,在这种情况下,默认情况下,我使用Postgres应用(OSX)而不是brewhttps://postgresapp.com/),这是此位置:

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

重新加载bash

sudo vi ~/.bash_profile

完成此操作后,我终于能够成功安装 pg gem

希望这可以帮助!


0

在Mac上,您可以尝试以下操作(对我有用):gem install pg-with-pg-include = / Library / PostgreSQL / 9.5 / include提取:pg-1.0.0.gem(100%)使用以下命令构建本机扩展: with-pg-include = / Library / PostgreSQL / 9.5 / include'可能需要一段时间...成功安装pg-1.0.0解析pg-1.0.0的文档安装ri文档pg-1.0.0的安装文档3秒后为pg安装1个宝石

(此部分“ /Library/PostgreSQL/9.5/include”中,您必须放置Postgres路径)

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.