Der Header 'libpq-fe.h' kann nicht gefunden werden, wenn versucht wird, pg gem zu installieren

790

Ich verwende die Ruby on Rails 3.1-Vorversion. Ich benutze gerne PostgreSQL, aber das Problem ist die Installation des pgEdelsteins. Es gibt mir den folgenden Fehler:

$ 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

Wie löse ich dieses Problem?

Dämonchand
quelle
Können Sie beweisen, dass Sie pg installiert haben?
Thenengah

Antworten:

1247

Es sieht so aus, als ob in Ubuntu der Header Teil des libpq-devPakets ist (zumindest in den folgenden Ubuntu-Versionen: 11.04 (Natty Narwhal), 10.04 (Lucid Lynx), 11.10 (Oneiric Ocelot), 12.04 (Precise Pangolin), 14.04 (Trusty Tahr) und 18.04 (Bionic Beaver)):

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

Versuchen Sie also, es libpq-devoder ein gleichwertiges Programm für Ihr Betriebssystem zu installieren :

  • Für Ubuntu / Debian-Systeme: sudo apt-get install libpq-dev
  • Auf Red Hat Linux (RHEL) -Systemen:yum install postgresql-devel
  • Für Mac Homebrew :brew install postgresql
  • Für Mac MacPorts PostgreSQL:gem install pg -- --with-pg-config=/opt/local/lib/postgresql[version number]/bin/pg_config
  • Für OpenSuse :zypper in postgresql-devel
  • Für ArchLinux :pacman -S postgresql-libs
mu ist zu kurz
quelle
1
hat nicht für mich gearbeitet am Ubuntu 11.04durrantm@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
Wenn Sie dann eine Javascript-Bibliothek installieren müssen ... gem install 'execjs' und gem install 'therubyracer'
Nick Woodhams
@TravisR: Danke für das Update, ich habe es gerade in ein Community-Wiki verwandelt, um es allen zu erleichtern, es auf dem neuesten Stand zu halten.
Mu ist zu kurz
Ich benutze Ubuntu 12.10, ich kann pg gem nicht installieren, nachdem ich
libpq
2
Bitte überarbeiten Sie Ihre Antwort, um sie apt-get install postgres-server-dev-{pg.version} einzuschließen. Ihre Antwort funktioniert nicht mehr mit postgresql 9.4 unter Ubuntu 14.04. Siehe: stackoverflow.com/a/28837453/75194
Ryan Rauh
169

Verwenden Sie unter macOS (früher Mac OS X und OS X ) Homebrew , um die richtigen Header zu installieren:

brew install postgresql

und dann rennen

gem install pg

sollte arbeiten.

Anstatt das Ganze zu installieren postgresql, können Sie alternativ brew install libpqdas richtige PATHund PKG_CONFIG_PATHwie im Abschnitt "Vorsichtsmaßnahmen" erläuterte exportieren

Ich wurde ausgeraubt
quelle
5
Verursacht dies Probleme, wenn Sie auch Postgres.app verwenden?
Bilderstürmer
3
Für mich nach dem Laufen laufe brew install postgressqlich ARCHFLAGS="-arch x86_64" gem install pgund funktioniert gut.
Overallduka
5
Alternativ reicht es aus, nur brew install libpqxxauf Mac OSX zu laufen
Ricardo Saporta
4
@ RicardoSaporta wird als Abhängigkeit libpqxxinstalliert postgresql, daher ist es im Wesentlichen dasselbe wiebrew install postgresql
Troggy
3
Anstatt das Ganze zu installieren postgresql, können Sie brew install libpqdas richtige PATHund PKG_CONFIG_PATHwie im Abschnitt "Vorsichtsmaßnahmen" erläuterte exportieren .
Goetzc
118

Ich hatte es auch versucht gem install libpq-dev, aber ich erhielt diesen Fehler:

Can't find the 'libpq-fe.h header
*** extconf.rb failed ***

Ich fand jedoch, dass die Installation mit sudo apt-get(was ich versuche, die Verwendung mit Ruby on Rails zu vermeiden) funktionierte, dh

sudo apt-get install libpq-dev
# or
apt-get install postgres-server-dev-{pg.version}
# for postgresql 9.4 on Ubuntu 14.04

dann konnte ich tun

gem install pg

ohne Probleme.

Michael Durrant
quelle
3
Richtig, das Ruby pg gem umschließt die üblichen PostgreSQL C-Bibliotheken, die mit dem Ubuntu / Debian / ... libpq-dev-Paket geliefert werden.
Mu ist zu kurz
46

Ich könnte das auf andere Weise lösen. Ich habe die Bibliothek auf meinem System nicht gefunden. Daher habe ich es mit einer App von der PostgreSQL-Hauptwebsite installiert. In meinem Fall (OS X) fand ich die Datei unter, /Library/PostgreSQL/9.1/include/sobald die Installation beendet war. Abhängig von Ihrem System können Sie die Datei auch an einem anderen Ort haben, wenn Sie PostgreSQL bereits installiert haben.

Dank dieses Links zum Hinzufügen eines zusätzlichen Pfads für die Gem-Installation konnte ich den Gem mit diesem Befehl auf die Bibliothek verweisen:

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

Danach funktioniert es, weil es jetzt weiß, wo die fehlende Bibliothek zu finden ist. Ersetzen Sie einfach den Pfad durch den richtigen Speicherort für Ihre libpq-fe.h.

David Pelaez
quelle
2
Davids Lösung hat bei mir funktioniert. Ich verfolgte libpq-fe.h bis '/Applications/Postgres.app/Contents/Versions/9.3/include' und verwendete den Exportbefehl mit diesem Pfad, gefolgt von 'gem install pg' und dem erfolgreich installierten gem.
Ryan Spears
Vielen Dank dafür, arbeitete für mich mit:export CONFIGURE_ARGS="with-pg-include=/usr/local/Cellar/postgresql/9.3.1/include/"
Brookr
1
Mit Postgresql 9.3 unter CentOS 6 habe ich dieses Problem gelöst, indem ich die pg_*Skripte wie folgt mit $ PATH verknüpft habe : ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin. Ich habe Postgres 9.3 wie folgt installiert: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
1
Sie können auch schreiben alsgem install pg -- with-pg-include=/Library/PostgreSQL/9.1/include/
lfender6445
Besser noch, verwenden export CONFIGURE_ARGS="with-pg-config=/path/to/postgres/bin/pg_config". Die pg_configausführbare Datei wird aufgerufen, um alle erforderlichen Compiler- und Linkeroptionen abzurufen. Sie können sie selbst ausführen, um sie anzuzeigen.
Skozin
29

Der libpq-fe.h-Header kann nicht gefunden werden

Ich hatte Erfolg unter CentOS 7.0.1406 mit den folgenden Befehlen:

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

Alternativ können Sie den Bundler so konfigurieren, dass er immer pgmit diesen Optionen installiert wird (hilfreich für die Ausführung des Bundlers in Bereitstellungsumgebungen).

  • bundle config build.pg --with-pg-config=/usr/pgsql-9.4/bin/pg_config
lfender6445
quelle
1
sehr hilfreich, danke. Nur um einen Hinweis zur Bundle-Konfiguration hinzuzufügen ... Sie müssen diesen Befehl ausführen, während Sie als Benutzer angemeldet sind, der den nachfolgenden Bundle-Befehl ausführen wird. Die Bundler-Konfiguration wird in ~ / .bundle / config gespeichert, sodass sie nicht gefunden wird, wenn Sie die Bundle-Konfiguration ausführen, während Sie als root angemeldet sind. Der Bundler wird jedoch von dem Benutzer 'deploy' (z. B. mit capistrano) ausgeführt.
Les Nightingill
3
Bundle config build.pg --with-pg-config = / usr / pgsql-9.4 / bin / pg_config löse ich für mich auf Centos 7
Liloargana
2
Bundle config build.pg --with-pg-config = / usr / pgsql-10 / bin / pg_config, wenn Sie postgresql10 verwenden
Mahesh Neelakanta
25

Für CentOS 6.4

yum install postgresql-devel
gem install pg

gut gearbeitet!

Arivarasan L.
quelle
Verwenden von Macports , sudo port install postgresql-devel.
Dawei Yang
17

Nur für das Protokoll:

Ruby on Rails 4-Anwendung in OS X mit PostgresApp (in diesem Fall Version 0.17.1 erforderlich - eine Art altes Projekt):

gem install pg -v '0.17.1' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_config
pablomarti
quelle
1
Funktioniert hervorragend, wenn Sie die wunderbare Postgres.app verwenden . Für Postgres 10 benutzte ich den Pfad/Applications/Postgres.app/Contents/Versions/10/bin/pg_config
Master of Ducks
13

Unter Mac OS X laufen Sie wie folgt ab:

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

***/path/to/pg_config*** ist der Pfad zu pg_config

Jiemurat
quelle
1
Upvoted. Ich habe Postgresql über das grapihcal-Installationsprogramm von EnterpriseDB installiert . Dann muss ich den pg-config-Pfad anhand von herausfinden sudo find / -name "pg_config"und dann gem install pg -- --with-pg-config=/Library/PostgreSQL/9.4/bin/pg_configden Pfad verwenden, den ich gerade herausgefunden habe.
Yi Zeng
12

In meinem Fall war es ein Paket postgresql-server-dev-8.4(ich bin auf Ubuntu 11.04 (Natty Narwhal), 64 Bit).

Johann
quelle
10

Die richtige Antwort für Mac-Benutzer mit Postgres.app besteht darin, gegen das libpqmit diesem Paket bereitgestellte zu bauen . Mit der Version 9.4 (zum jetzigen Zeitpunkt aktuell) benötigen Sie lediglich Folgendes:

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

Dadurch bleibt Ihr pgJuwel mit genau der Version von PostgreSQL synchron, die Sie installiert haben. In diesem Fall ist es eine Verschwendung, etwas von Homebrew zu installieren.

Jelder
quelle
9

Ich hatte das gleiche Problem unter Amazon Linux. Ich konnte den Header finden libpq-fe.h, aber irgendwie hat es nicht funktioniert.

Es stammte aus den verschiedenen Versionen der Pakete, die von den verschiedenen Benutzern auf dem Computer installiert wurden. PostgreSQL 9.2 und PostgreSQL 9.3 wurden installiert. Stellen Sie also sicher, dass Sie Ihre PostgreSQL-Version haben, bevor Sie die Bibliotheken einschließen.

Für mich war die magische Kommandozeile:

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

Quelle: Eine fast idiotische Anleitung zur Installation von PostgreSQL 9.3, PostGIS 2.1 und pgRouting mit Yum

Fab V.
quelle
Nach der Installation der Bibliotheken ... bereinigen Sie: "make distclean", "make clean", "./configure" und beginnen Sie mit dem Kompilieren!
Mzalazar
8

Eine allgemeinere Antwort für jede Debian-basierte Distribution (einschließlich Ubuntu) lautet wie folgt. Installieren Sie zunächst das apt-filePaket, das als root ausgeführt wird:

apt-get install apt-file

Auf diese Weise können Sie nach Paketen suchen, die eine Datei enthalten. Aktualisieren Sie dann die Datenbank mit

apt-file update

(Dies kann als normaler Benutzer ausgeführt werden). Suchen Sie dann nach dem fehlenden Header mit:

apt-file search libpq-fe.h

Auf meinem Computer gibt dies:

libpq-dev: /usr/include/postgresql/libpq-fe.h
postgres-xc-server-dev: /usr/include/postgres-xc/server/gtm/libpq-fe.h

Los geht's!

Vincent Fourmond
quelle
"libpq-dev: /usr/include/postgresql/libpq-fe.h" ist vorhanden, während "postgres-xc-server-dev: /usr/include/postgres-xc/server/gtm/libpq-fe.h" vorhanden ist nicht vorhanden ? Was vermisse ich ?
Furiabhavesh
Der Dateiinhalt hat sich möglicherweise geändert. Es sieht so aus, als ob sich im Paket postgres -... eine private Kopie von libpq-fe.h befand. In jedem Fall ist der libXXX-dev derjenige, den Sie suchen, wenn Sie Dinge kompilieren möchten.
Vincent Fourmond
7

Für MacOS ohne Installation des PostgreSQL-Servers:

brew install libpq
gem install pg -- --with-pg-config="/usr/local/Cellar/libpq/9.6.6/bin/pg_config"
Michael A.
quelle
5

Auf einem Mac habe ich es mit folgendem Code gelöst:

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

Ich verwende Postgres.app auf einem Mac und musste

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

zuerst. Dann

bundle install

arbeitete für mich.

joh-mue
quelle
4

Ich hatte das gleiche Problem unter Mac OS, aber ich habe das PostgreSQL-Juwel einfach installiert, indem ich Folgendes in einem Terminal verwendet habe:

ARCHFLAGS="-arch x86_64" gem install pg

(Ich habe PostgreSQL zuerst mit installiert brew install postgresql.)

rassom
quelle
4

Ich fand diese Antwort und es war die einzige, die für mich (Mac OS) funktionierte - nachdem ich ungefähr zwei Tage lang recherchiert hatte:

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

Siehe Frage zum Stapelüberlauf . Die PostgreSQL-Clientbibliothek (libpq) kann nicht gefunden werden .

Cynthia Sanchez
quelle
4

Ich habe kürzlich ein Upgrade auf Mac OS X 10.10 (Yosemite) durchgeführt und hatte Schwierigkeiten, das pgJuwel zu erstellen .

Der gemeldete Fehler war der typische:

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

Meine Lösung war, gem uninstall pgund dann bundle update pgden Stein mit dem neuesten zu ersetzen. Ich habe brew update; brew upgradenach der Yosemite-Installation ausgeführt, um die neuesten Versionen von Paketen zu erhalten, die ich zuvor installiert hatte.

Martin Streicher
quelle
4

Installieren Sie unter Ubuntu "libpq-dev", um dieses Problem zu beheben.

sudo apt-get install libpq-dev
Raju
quelle
Wenn es nicht genug ist, fügen Sie sudo apt-get install postgresqlvorlibpq-dev
Alex Poca
3

Unter CentOS habe ich libpq-dev packagemit dem folgenden Befehl installiert

yum install postgresql-devel

Die Ausführung gem install pggab den gleichen Fehler wie " No pg_config... trying anyway. If building fails, please try again with --with-pg-config=/path/to/pg_config" zurück.

Die Installation des Edelsteins wie unten hat mein Problem gelöst

gem install pg -- --with-pg-config=/usr/pgsql-x.x/bin/pg_config
user2086641
quelle
2

Unter FreeBSD (9.1) ist das erforderliche Paket / usr / ports / database / postgresql-server *. Bei der Installation wird auch die erforderliche Header-Datei installiert, wodurch die Gem-Installation von "pg" fehlschlägt. Diese Antwort hier hat mir geholfen, die Lösung zu finden, aber der Unterschied in den Paketnamen erforderte ein wenig Suche.

Hoffentlich hilft dies jemandem, ein bisschen Kopfkratzen zu vermeiden, wenn er auf einem FreeBSD-System nach dem "-dev" -Paket sucht!

Claus fällig
quelle
2

Führen Sie unter Debian 7.0, 64-Bit (Wheezy) einfach Folgendes aus:

sudo apt-get install libpq-dev

Führen Sie nach der erfolgreichen Installation von libpq-dev Folgendes aus:

bundle install
Eric Wu
quelle
2

Unter CentOS 6.5 (Squeeze) habe ich eine Datei erstellt:

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

mit Inhalt:

pathmunge /usr/pgsql-9.3/bin

Beachten Sie hier, dass Sie Ihren PostgreSQL-Pfad mit der Datei pg_config festlegen sollten. Sie finden dies mit dem Befehl:

$ sudo find / -iname pg_config

Speicher die Datei:

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

und versuchen Sie erneut, Ihren Befehl auszuführen.

Hinweis: Jedes Mal, wenn Sie die Bash- Konfiguration ändern - die profile.d-Konfiguration ändern - sollten Sie Bash neu laden.

lucianosousa
quelle
Wie haben Sie postgres installiert? Ich habe die pg_*Skripte wie folgt mit dem Pfad verknüpft : ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin. Danach brauchte ich keine zusätzlichen Skripte oder Umgebungsvariablen.
JoePasq
2

Der Speicherort libpq-fe.hhängt davon ab, wo sich Ihre PostgreSQL-Installation befindet (was davon abhängt, wie Sie sie installiert haben). Verwenden Sie locate( http://en.wikipedia.org/wiki/Locate_%28Unix%29 ), um die libpq-fe.hDatei auf Ihrem Computer zu finden. Wenn es existiert, befindet es sich im includeVerzeichnis Ihrer PostgreSQL-Installation.

$ locate libpq-fe.h
/Library/PostgreSQL/9.1/include/libpq-fe.h

Das binVerzeichnis, das enthält pg_config, befindet sich im selben Verzeichnis wie das includeVerzeichnis. Verwenden Sie, wie der Fehler andeutet, die Option --with-pg-config, um das Juwel zu installieren:

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

Beachten Sie, dass Sie möglicherweise ausgeführt werden müssen, updatedbwenn Sie locatePostgreSQL noch nie verwendet haben oder wenn Sie es seit der Installation von PostgreSQL nicht mehr aktualisiert haben.

akbrown
quelle
Ohne ein --vorher --with-pg-config=...erhalte ich eine Fehlermeldung: FEHLER: Während der Ausführung von gem ... (OptionParser :: InvalidOption) ungültige Option: --with-pg-config = / usr / bin / pg_config)
Alexis Wilke
2

Ich habe dieses Problem endlich gelöst, aber nicht mit den zuvor beschriebenen Methoden.

Mit brew install postgresqlfinde ich heraus, dass es bereits installiert, aber nicht verknüpft war.

  1. Finden Sie heraus, wo PostgreSQL installiert ist, und löschen Sie es.

  2. Dann brew install postgresqlwieder,

  3. brew link postgresql

  4. gem install pg

Chile Yang
quelle
"Brew Link --force postgresql" hat bei mir funktioniert, aber vorher muss ich 'export PATH = "/ usr/local/opt/[email protected]/bin: $ PATH"' >> ~ / .bash_profile
Jagdish Narayandasani
2

Ich hatte dieses Problem mit Postgresql 9.6. Ich konnte es beheben, indem ich Folgendes tat:

brew upgrade postgresql@9.6
brew link postgresql@9.6 --force
gem install pg
mwalsher
quelle
2

Ich habe den gleichen Fehler bei Postgres festgestellt, die über asdf installiert wurden. Die pg-config-Lösungen haben bei mir nicht funktioniert. Stattdessen musste ich den Postgres-Include-Ordner suchen, der die Datei enthält, und den Befehl mit dem --with-pg-includeFlag ausführen

gem install pg -- --with-pg-include=/<path>/.asdf/installs/postgres/<version>/include
Matthias Michael Engh
quelle
1

Für AltLinuxdas Paket muss postgresqlx.x-devel(in meinem Fall postgresql9.5-devel) Folgendes installiert sein:

apt-get install postgresql9.5-devel
Малъ Скрылевъ
quelle
Sie können auch bestimmte Versionen mit yum installieren - yum postgresqlxx-devel installieren, z. B. yum postgresql94-devel installieren
dworrad
1

Ich habe dieses Problem gelöst, indem ich das Paket 'postgresql-common' installiert habe. Dieses Paket enthält die pg_configBinärdatei, die höchstwahrscheinlich fehlt.

Fabrizio Regini
quelle