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?


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

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


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.


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.


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

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


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

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


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


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.


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


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!


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

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

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.


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


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 .


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.


4

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

sudo apt-get install libpq-dev

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

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!


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

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.


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.


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


"Brew Link --force postgresql" hat bei mir funktioniert, aber vorher muss ich 'export PATH = "/ usr/local/opt/postgresql@9.4/bin: $ PATH"' >> ~ / .bash_profile
Jagdish Narayandasani

2

Ich hatte dies gerade auf OSX mit Brew und postgres@9.4.

Mein Fix war folgender:

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

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

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

1

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

apt-get install postgresql9.5-devel

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.