Die PostgreSQL-Clientbibliothek (libpq) kann nicht gefunden werden.

146

Ich versuche, PostgreSQL for Rails unter Mac OS X 10.6 zu installieren. Zuerst habe ich versucht, MacPorts zu installieren, aber das lief nicht gut, also habe ich die DMG-Installation mit einem Klick durchgeführt. Das schien zu funktionieren.

Ich vermute, ich muss die PostgreSQL-Entwicklungspakete installieren, aber ich habe keine Ahnung, wie das unter OS X geht.

Folgendes bekomme ich, wenn ich es versuche 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
Jason Swett
quelle
Haben Sie Version 8.3 von postgresql installiert oder nimmt es eine alte Installation auf? Wenn es sich um 8.3 handelt, sollten sich Bibliotheken in /Library/PostgreSQL/8.3/lib befinden. Überprüfen Sie, ob es dort vorhanden ist.
Eelke
Ich habe Version 8.3 gemacht und ja, es sieht so aus, als ob alles da ist.
Jason Swett
Können Sie die Ausgabe von posten pg_config? Das sollte es uns leichter machen, zu helfen.
Justis
Ich musste die Version -v '0.14.0' hinzufügen, damit es mit
meinem

Antworten:

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

HAT FUNKTIONIERT!

Siddhartha Mukherjee
quelle
2
Ich musste die Version "env ARCHFLAGS =" - arch x86_64 "gem install -v '0.14.0'" hinzufügen, damit es mit meinem Projekt
funktioniert
6
Arbeitete für OS X Mavericks. Für mich ist esenv ARCHFLAGS="-arch x86_64" gem install pg -v '0.17.1' -- --with-pg-config=/opt/local/lib/postgresql91/bin/pg_config
Dawei Yang
17
Und wenn Sie "Postgres.app" unter Außenseitern verwenden, sollten Sie Folgendes tun: env ARCHFLAGS = "- arch x86_64 gem install pg - --with-pg-config = / Applications / Postgres.app / Contents / Versions / 9.3 / bin / pg_config (Angenommen, Sie verwenden Postgres.app Version 9.3, da sich der Speicherort von pg_config möglicherweise geändert hat, wenn Sie eine andere Version verwenden, aber Sie können ihn trotzdem finden)
Zhaonan
2
Dies funktionierte für mich und brach eine 2-stündige Unterbrechung. Ich bin neu in Schienen und das war frustrierend. Wie der vorherige Kommentator habe ich das Postgres.app-Installationsprogramm für Mavericks verwendet. Wusste nicht, dass die Variable ARCHFLGS env so wichtig ist. Erklärung hier.
GNat
3
Die Frage ist, warum das funktioniert? Was macht "ARCHFLAGS =" - arch x86_64 "und warum funktioniert die Installation des Vanille-Edelsteins nicht? Es sollte nicht so schwierig sein, einen Edelstein zu installieren.
Jared Menard
78

Ich habe hier die bestbewertete Antwort ausprobiert:

env ARCHFLAGS="-arch x86_64" gem install pg

Aber als ich erneut versuchte, die Bundle-Installation auszuführen, hatte es den gleichen Fehler. Dann habe ich versucht, das gesamte Bundle mit ARCHFLAGS wie folgt zu installieren:

ARCHFLAGS="-arch x86_64" bundle install

Hat für mich gearbeitet! Stellen Sie sicher, dass Sie x86_64 durch i386 ersetzen, je nachdem, über welche Architektur Sie verfügen.

Christine Loh
quelle
2
Ich danke dir sehr. Das hat bei mir funktioniert. Ich habe versucht, dieses Problem seit mehr als einer Stunde zu beheben, und dieser Code hat es getan - ARCHFLAGS = "- arch x86_64" Bundle-Installation
ptretenone
@prechenones Hinzufügung hier arbeitete für mich am High Sierra
tnaught
Geschätzt für @Christine, es hat für mich auf High Sierra
Ymow Wu
31

Ich hatte gerade dieses Problem bei der Verwendung der EnterpiseDB .dmg. Wenn das der gleiche Gedanke ist, den Sie verwendet haben, habe ich es durch Angabe der richtigen Architektur zum Laufen gebracht:

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

Es gibt einige Tutorials im Web, in denen eine andere Architektur angegeben wird (z. B. "-arch x86_64" für Benutzer von MacPorts), die jedoch bei mir nicht funktioniert haben, da ich die Installation einzelner Dateien verwendet habe.

bobfet1
quelle
6
x86_64 funktionierte für mich (Mac OS 10.6.8, PostgreSQL über Homebrew installiert: mxcl.github.com/homebrew )
Chesterbr
2
Habe Stunden gebraucht, um eine Lösung zu finden, und deine hat funktioniert, bobfet1 & @chester. Vielen Dank! :-))) ** sudo env ARCHFLAGS = "- arch x86_64" gem install pg **
rassom
24

Bei Verwendung von Yosemite:

brew install postgres

Dann:

ARCHFLAGS="-arch x86_64" gem install pg

Und (optional) schließlich, wenn Sie Autovacuum starten möchten ...

postgres -D /usr/local/var/postgres
Etusm
quelle
21

Vielleicht können Sie dieses versuchen:

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

Um die Architektur Ihrer Bibliothek zu kennen, können Sie verwenden

file /usr/local/lib/libpq.dylib 

was in meinem Fall nur 1 Architektur ergab (installiert über Homebrew):

/usr/local/lib/libpq.dylib: Mach-O 64-bit dynamically linked shared library x86_64
ybart
quelle
+1 Vielen Dank für den Hinweis, welche Architektur meine Bibliothek war!
Spike
Überprüfen Sie auch die Architektur Ihrer Ruby-Binärdatei.
Leopd
18

Lösung: PostgreSQL mit Homebrew neu installiert.

Jason Swett
quelle
1
Glückwunsch! Denken Sie daran, das Kopfgeld an jemanden zu vergeben. Ein paar Leute haben sich sehr bemüht zu helfen, auch wenn es nicht die endgültige Lösung war, und die Reputationspunkte wurden bereits ausgegeben, als Sie das Kopfgeld anboten.
Justis
2
Ich bin mir nicht sicher, warum dies eine -1 ist, die für mich funktioniert hat, als keine der anderen Methoden dies tat
Abe Petrillo
Ich musste auch die ARCHFLAGS-Methode verwenden, aber sie funktionierte erst, nachdem postresql mit homebrew neu installiert wurde.
Dave Cowart
Arbeitete für Yosemite (10.10.3). Brew installieren PostgreSQL
Roosevelt
Das hat bei mir nicht funktioniert. Ich frage mich, ob es etwas damit zu tun hat, dass ich den "eingebauten" Ruby (glaube ich) anstelle von irgendetwas anderem verwende: |
Rogerdpack
6

Fake out gemdurch Präfixieren der entsprechenden Umgebungsvariablen. Wenn Sie von MacPorts installiert haben, sollten Sie in der Lage sein, die folgenden Schritte auszuführen:

% /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

Von dort herausziehen LIBDIR, INCLUDEDIR, CPPFLAGS, LIBSund LDFLAGS(die, die ich bekommen denken Sie laufen LIBDIR, jedoch). Dann würden Sie laufen:

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

Das sollte es für dich tun. Lass es mich wissen, wenn es nicht so ist.

Sean
quelle
Ich habe das One-Click-Installationsprogramm anstelle von MacPorts für PostgreSQL verwendet. Ich weiß nicht, was der entsprechende Befehl wäre.
Jason Swett
Sehen Sie, ob Sie Glück damit haben (ich denke, Macs aktualisiertes Skript läuft am Samstagabend):locate pg_config
Sean
Ich weiß immer noch nicht, wofür das bedeuten würde CPPFLAGSoder LDFLAGS(ich weiß nicht, was das sind, sorry).
Jason Swett
Oh, aber locate pg_confighat mir ein paar Sachen gezeigt. Und ich habe versucht, PostgreSQL einfach über MacPorts zu installieren und Ihren Befehl zu verwenden - hat nicht funktioniert.
Jason Swett
1
Das obige Beispiel wurde aktualisiert. Ich glaube, dass dies Ihr Problem lösen wird. Der Haken war, dass LDFLAGSnicht auf das Verzeichnis gesetzt wurde, das enthielt libpq. Siehe oben für Details.
Sean
5

Das Problem, das wir hatten, war ziemlich seltsam.

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

Als wir jedoch eine Bundle-Installation durchgeführt haben, wurde der Bundler nicht für die von rbenv installierte Ruby-Version installiert. Bei der Eingabe der Bundle-Installation wurde der Bundler des Systems verwendet.

Stellen Sie daher vor dem Ausführen der Bundle-Installation sicher, dass Sie den Bundler durch Ausführen installiert haben

gem install bundler
Tibastral
quelle
Dies funktionierte in meinem Fall (frisches macOS High Sierra, mit rbenv und meistens mit Brew). Bundle verwendete wahrscheinlich Dinge von Apfel, das war das Problem ...
saza
3

Ich glaube nicht, dass Sie die Postgres-Entwicklungsdateien benötigen. Alles, was Sie benötigen, sollte in Ihrem Installationsprogramm enthalten sein. Es ist wahrscheinlicher, dass sich der Pfad, auf dem sie installiert sind, nicht in Ihrem Umgebungspfad befindet. Daher kann gem sie nicht finden, wenn es versucht, pg zu kompilieren.

Sie sollten nicht gem install pgals root ausgeführt werden müssen. Wenn Sie dies tun, enthält Ihr PATH (der PATH von root, wenn er mit sudo ausgeführt wird) wahrscheinlich nicht die erforderlichen Informationen.

Folgendes funktioniert normalerweise bei mir:

# 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
Brett Bender
quelle
Wenn Sie gem install pg(zusammen mit Ihren beiden vorherigen Befehlen) ausführen, erhalten Sie sudo gem install pgimmer noch genau die gleichen Ergebnisse.
Jason Swett
Arbeiten Sie mit 32- oder 64-Bit-Architektur? Haben Sie das oben genannte mit der anderen Architekturflagge versucht? /Library/PostgreSQL/...Haben Sie auch an den richtigen Ort gewechselt, an dem sich Ihre Kopie der Postgres-Installation befindet?
Brett Bender
Ich habe in meinen Notizen über die Ausführung der von mir aufgelisteten Befehle nachgesehen. Sieht so aus, als hätte ich Postgres über installiert sudo port install postgresql83 postgresql83-server, ähnlich wie in den folgenden Anweisungen: flow88.com/2010/06/installing-postgresql-for-rails-on-mac-os-x . Es scheint, dass das eigenständige Installationsprogramm 32-Bit ist, daher möchten Sie Ihre Arch-Flags auf 32-Bit setzen, selbst wenn Ihr Computer 64-Bit ist. Wenn Sie es nicht zum Laufen bringen können, würde ich empfehlen, es über MacPorts zu deinstallieren und neu zu installieren und dann die obigen Anweisungen auszuführen. Hoffentlich hilft das!
Brett Bender
3

Dies ist, was es letztendlich für mich getan hat (Kombination mehrerer zuvor bereitgestellter Lösungen zusammen mit anderen Beiträgen):

$ sudo env ARCHFLAGS = "- arch x86_64" gem install pg - with-pg-include = / Bibliothek / PostgreSQL / 9.6 / include /

Marcus Silveira
quelle
Die obige Lösung funktionierte für mich unter Mac OS High Sierra sudo env Suchen Sie den genauen Pfad für den Include-Ordner und aktualisieren Sie diesen entsprechend.
Maniempire
1

Die ARCHFLAGSAntwort, die andere vorgeschlagen haben, funktioniert nicht, wenn Sie irgendwie eine 64-Bit-Version von Postgres (die von Homebrew installiert wird) und eine 32-Bit-Version von Ruby erhalten haben. Aus irgendeinem Grund rbenvbesteht ich darauf, Ruby 1.9.2-p290 als 32-Bit zu erstellen, was es unmöglich macht, eine Verknüpfung mit 64-Bit-Postgres herzustellen.

Überprüfen Sie die Architektur Ihrer Ruby-Binärdatei mit

file `which ruby`

oder wenn Sie rbenv verwenden

file `rbenv which ruby`

Und vergleichen Sie mit Ihren Postgres:

file `which postgres`

Wenn es eine Fehlanpassung gibt, müssen Sie Postgres oder Ruby neu installieren. Mit rbenv habe ich das gelöst, indem ich zu einer anderen Version gewechselt habe: 1.9.3-p194statt 1.9.2-p290.

Leopd
quelle
1

So habe ich es geschafft, an Mavericks zu arbeiten. Hinweis: Ich hatte bereits postgresql 9.3 von Homebrew installiert.

  1. Aktualisieren Sie Xcode aus dem App Store auf 5.0

  2. Installieren Sie die Befehlszeilen-Entwicklertools

    xcode-select --install

  3. Stimmen Sie der Xcode-Lizenz zu

    sudo xcodebuild -Lizenz

  4. Installieren Sie gem

    ARCHFLAGS = "- arch x86_64" gem install pg

Michał Szajbe
quelle
1

Also habe ich das gemacht ;-)

brew install postgres
Jackie Chan
quelle
Installiert Brew die Datei libpq.so (dylib), wie Ihre Antwort impliziert?
Paul-Sebastian Manole
0

Ich bin wahrscheinlich etwas spät zur Party hier, aber in meinem Fall habe ich rbenv verwendet und auf Ruby 2.2.3 aktualisiert. Ich musste Bundler installieren, um meinen zum Laufen zu bringen. Ich hatte eine alte Systemversion.

gem install bundler

mchapman17
quelle
0

Wie oben erwähnt, hat dies mit der Tatsache zu tun, dass zwei Rubinbögen auf rbenv vorhanden sind. /usr/bin/ruby: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [i386:Mach-O executable i386]Ich musste einfach den pgEdelstein-Forcing- x86_64Bogen installieren , um mit diesem Befehl verwendet zu werden:

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

Denken Sie daran, Ihre bash_profileauf dem neuesten Stand zu halten

Fügen Sie den Pfad Ihres Postgres hinzu. In diesem Fall verwende ich standardmäßig die Postgres-App ( OSX) anstelle von brew( https://postgresapp.com/ ). Dies ist der Speicherort:

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

Bash mit neu laden mit

sudo vi ~/.bash_profile

Danach konnte ich endlich erfolgreich installieren pg gem

Hoffe das hilft!

d1jhoni1b
quelle
0

Auf dem Mac können Sie dies versuchen (funktioniert bei mir): gem install pg - with-pg-include = / Library / PostgreSQL / 9.5 / include Abrufen: pg-1.0.0.gem (100%) Erstellen nativer Erweiterungen mit: ' with-pg-include = / Library / PostgreSQL / 9.5 / include 'Dies kann eine Weile dauern ... Erfolgreich installiert pg-1.0.0 Parsing-Dokumentation für pg-1.0.0 Installation der ri-Dokumentation für pg-1.0.0 Die Installation der Dokumentation ist abgeschlossen für pg nach 3 sekunden 1 gem installiert

(In diesem Teil "/Library/PostgreSQL/9.5/include" müssen Sie Ihren Postgres-Pfad angeben.)

Marcos Riveros
quelle