Impossibile trovare l'intestazione 'libpq-fe.h quando si tenta di installare pg gem


790

Sto usando la versione precedente di Ruby on Rails 3.1. Mi piace usare PostgreSQL, ma il problema è l'installazione della pggemma. Mi dà il seguente errore:

$ 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

Come posso risolvere questo problema?


puoi provare che hai installato pg?
thenengah,

Risposte:


1247

Sembra che in Ubuntu l'intestazione sia parte del libpq-devpacchetto (almeno nelle seguenti versioni di Ubuntu: 11.04 (Natty Narwhal), 10.04 (Lucid Lynx), 11.10 (Oneiric Ocelot), 12.04 (Precise Pangolin), 14.04 (Trusty Tahr) e 18.04 (Bionic Beaver)):

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

Quindi prova a installare libpq-devo il suo equivalente per il tuo sistema operativo:

  • Per i sistemi Ubuntu / Debian: sudo apt-get install libpq-dev
  • Sui sistemi Red Hat Linux (RHEL):yum install postgresql-devel
  • Per Mac Homebrew :brew install postgresql
  • Per Mac MacPorts PostgreSQL:gem install pg -- --with-pg-config=/opt/local/lib/postgresql[version number]/bin/pg_config
  • Per OpenSuse :zypper in postgresql-devel
  • Per ArchLinux :pacman -S postgresql-libs

1
non ha funzionato per me su 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
Se ti viene richiesto di avere una libreria javascript installata ... gem install 'execjs' e gem install 'therubyracer'
Nick Woodhams,

@TravisR: Grazie per l'aggiornamento, l'ho appena trasformato in un wiki della community per rendere più semplice l'aggiornamento a tutti.
mu è troppo corto il

Sto usando Ubuntu 12.10, non sono in grado di installare pg gem dopo aver installato libpq-dev
vedarthk

2
Rivedi la tua risposta per includere la apt-get install postgres-server-dev-{pg.version} tua risposta non funziona più con postgresql 9.4 su Ubuntu 14.04 Vedi: stackoverflow.com/a/28837453/75194
Ryan Rauh

169

Su macOS (precedentemente Mac OS X e OS X ), usa Homebrew per installare le intestazioni appropriate:

brew install postgresql

e poi in esecuzione

gem install pg

dovrebbe funzionare.

In alternativa, invece di installare il tutto postgresql, puoi brew install libpqed esportare il corretto PATHe PKG_CONFIG_PATHcome spiegato nella sezione "Avvertenze"


5
Questo causa problemi se stai usando anche Postgres.app?
iconoclasta,

3
Per me dopo l'esecuzione brew install postgressqlcorro ARCHFLAGS="-arch x86_64" gem install pge funziona benissimo.
overallduka,

5
In alternativa, basta eseguire solo brew install libpqxxsu Mac OSX
Ricardo Saporta il

4
@RicardoSaporta si libpqxxinstalla postgresqlcome dipendenza, quindi è essenzialmente lo stesso dibrew install postgresql
Troggy

3
Invece di installare il tutto postgresql, puoi brew install libpqed esportare il corretto PATHe PKG_CONFIG_PATHcome spiegato nella sezione "Avvertenze".
Goetzc,

118

Ho anche provato a farlo gem install libpq-dev, ma ho ricevuto questo errore:

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

Tuttavia ho scoperto che l'installazione con sudo apt-get(che cerco di evitare di utilizzare con Ruby on Rails) ha funzionato, vale a dire

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

allora sono stato in grado di fare

gem install pg

senza problemi.


3
Bene, la gemma di Ruby pg avvolge le solite librerie PostgreSQL C fornite con il libpq-devpacchetto Ubuntu / Debian / ....
mu è troppo corto il

46

Potrei risolverlo in un altro modo. Non ho trovato la libreria sul mio sistema. Così l'ho installato usando un'app dal sito Web principale di PostgreSQL. Nel mio caso (OS X) ho trovato il file sotto /Library/PostgreSQL/9.1/include/una volta terminata l'installazione. Potresti anche avere il file altrove a seconda del tuo sistema se hai già installato PostgreSQL.

Grazie a questo link su come aggiungere un percorso aggiuntivo per l'installazione gem , potrei puntare la gemma sulla lib con questo comando:

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

Dopodiché, funziona, perché ora sa dove trovare la libreria mancante. Sostituisci semplicemente il percorso con la posizione giusta per il tuo libpq-fe.h


2
La soluzione di David ha funzionato per me. Ho rintracciato libpq-fe.h su '/Applications/Postgres.app/Contents/Versions/9.3/include' e ho usato il comando export con detto percorso, seguito da 'gem install pg' e la gemma è stata installata correttamente.
Ryan Spears,

Grazie per questo, ha funzionato per me, usando:export CONFIGURE_ARGS="with-pg-include=/usr/local/Cellar/postgresql/9.3.1/include/"
brookr

1
Utilizzando PostgreSQL 9.3 su CentOS 6 Ho risolto questo con un collegamento simbolico gli pg_*script in $ PATH in questo modo: ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin. Ho installato Postgres 9.3 in questo modo: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 il

1
puoi anche scrivere comegem install pg -- with-pg-include=/Library/PostgreSQL/9.1/include/
lfender6445

Meglio ancora, usa export CONFIGURE_ARGS="with-pg-config=/path/to/postgres/bin/pg_config". L' pg_configeseguibile verrà chiamato per ottenere tutte le opzioni richieste di compilatore e linker: puoi eseguirlo tu stesso per vederle.
skozin,

29

Impossibile trovare l'intestazione libpq-fe.h

ho avuto successo su CentOS 7.0.1406 eseguendo i seguenti comandi:

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

In alternativa , è possibile configurare il bundler affinché si installi sempre pgcon queste opzioni (utile per eseguire il bundler in ambienti di distribuzione),

  • bundle config build.pg --with-pg-config=/usr/pgsql-9.4/bin/pg_config

1
molto utile, grazie. Solo per aggiungere una nota relativa alla configurazione del bundle ... è necessario eseguire questo comando durante l'accesso come utente che eseguirà il comando bundle successivo. La configurazione del bundler è memorizzata in ~ / .bundle / config, quindi non verrà trovata se si esegue la configurazione del bundle mentre si è effettuato il login come root, ma il bundler viene eseguito (ad es. Con capistrano) l'utente 'deploy'.
Les Nightingill,

3
bundle config build.pg --with-pg-config = / usr / pgsql-9.4 / bin / pg_config risolvimi per me su Centos 7
liloargana,

2
bundle config build.pg --with-pg-config = / usr / pgsql-10 / bin / pg_config se stai usando postgresql10
Mahesh Neelakanta


17

Solo per la cronaca:

Applicazione Ruby on Rails 4 in OS X con PostgresApp (in questo caso è necessaria la versione 0.17.1 - tipo di vecchio progetto):

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

1
Funziona alla grande se stai usando il meraviglioso Postgres.app . Per Postgres 10, ho usato il percorso/Applications/Postgres.app/Contents/Versions/10/bin/pg_config
Master of Ducks il

13

Su Mac OS X, esegui in questo modo:

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

***/path/to/pg_config*** è il percorso di pg_config


1
Upvoted. Ho installato Postgresql tramite il programma di installazione grapihcal di EnterpriseDB . Quindi ho bisogno di scoprire il percorso pg-config sudo find / -name "pg_config", quindi gem install pg -- --with-pg-config=/Library/PostgreSQL/9.4/bin/pg_configusare il percorso che ho appena scoperto.
Yi Zeng,


10

La risposta giusta per gli utenti Mac con Postgres.app è quella di creare contro il libpqpacchetto fornito. Ad esempio, con la versione 9.4 (attuale al momento della stesura), tutto ciò che serve è:

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

Ciò manterrà il tuo pggioiello sincronizzato esattamente con la versione di PostgreSQL che hai installato. Installare qualcosa da Homebrew è uno spreco in questo caso.


9

Ho avuto lo stesso problema su Amazon Linux. Ho trovato l'intestazione libpq-fe.h, ma in qualche modo non ha funzionato.

Proviene dalle diverse versioni dei pacchetti che sono stati installati attraverso i diversi utenti sulla macchina. PostgreSQL 9.2 e PostgreSQL 9.3 sono stati installati. Quindi, assicurati della tua versione PostgreSQL prima di includere le librerie.

Per me, la linea di comando magica era:

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

Fonte: una guida quasi idiota per installare PostgreSQL 9.3, PostGIS 2.1 e pgRouting con Yum


Dopo aver installato le librerie ... fai una pulizia: "make distclean", "make clean", "./configure" e inizia la compilazione!
mzalazar,

8

Una risposta più generale per qualsiasi distribuzione basata su Debian (che include Ubuntu) è la seguente. Innanzitutto, installa il apt-filepacchetto in esecuzione come root:

apt-get install apt-file

Ciò consente di cercare pacchetti contenenti un file. Quindi, aggiorna il suo database utilizzando

apt-file update

(può essere eseguito come utente normale). Quindi, cerca l'intestazione mancante utilizzando:

apt-file search libpq-fe.h

Sulla mia macchina, questo dà:

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

Ecco qua!


"libpq-dev: /usr/include/postgresql/libpq-fe.h" è presente mentre "postgres-xc-server-dev: /usr/include/postgres-xc/server/gtm/libpq-fe.h" è non presente ? cosa mi sto perdendo?
furiabhavesh,

Il contenuto del file potrebbe essere cambiato. Sembra che ci fosse una copia privata di libpq-fe.h nel pacchetto postgres -.... In ogni caso, libXXX-dev è quello che stai cercando se vuoi compilare delle cose.
Vincent Fourmond,

7

Per MacOS senza installare il server PostgreSQL:

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

5

Su un Mac, l'ho risolto usando questo codice:

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

4

Sto eseguendo Postgres.app su un Mac e ho dovuto farlo

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

primo. Poi

bundle install

ha funzionato per me.


4

Ho avuto lo stesso problema su Mac OS, ma ho installato facilmente la gemma PostgreSQL usando un terminale in un terminale:

ARCHFLAGS="-arch x86_64" gem install pg

(Ho installato PostgreSQL prima con brew install postgresql.)


4

Ho trovato questa risposta, ed è stata l'unica che ha funzionato per me (Mac OS) - dopo una ricerca per circa due giorni:

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

Vedi la domanda Stack Overflow Impossibile trovare la libreria client PostgreSQL (libpq) .


4

Di recente ho effettuato l'aggiornamento a Mac OS X v10.10 (Yosemite) e stavo riscontrando difficoltà nella creazione della pggemma.

L'errore segnalato era il tipico:

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

La mia soluzione era quella gem uninstall pge quindi bundle update pgsostituire il gioiello con l'ultima. Ho eseguito brew update; brew upgradel'installazione Yosemite per ottenere le ultime versioni dei pacchetti che avevo installato in precedenza.


4

Su Ubuntu, installa "libpq-dev" per eliminare questo problema.

sudo apt-get install libpq-dev

Se non è abbastanza, aggiungi sudo apt-get install postgresqlprimalibpq-dev
Alex Poca

3

Su CentOS, ho installato libpq-dev packageusando il comando seguente

yum install postgresql-devel

L'esecuzione ha gem install pgrestituito lo stesso errore di " No pg_config... trying anyway. If building fails, please try again with --with-pg-config=/path/to/pg_config".

L'installazione della gemma come di seguito ha risolto il mio problema

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

2

Su FreeBSD (9.1) il pacchetto necessario è / usr / doors / database / postgresql-server * che una volta installato installerà anche il file di intestazione richiesto che farà fallire l'installazione gem di "pg". Questa risposta qui mi ha aiutato a trovare la soluzione, ma la differenza nei nomi dei pacchetti ha richiesto un po 'di ricerca.

Spero che questo aiuti qualcuno a evitare un po 'di grattarsi la testa quando cerca il pacchetto "-dev" su un sistema FreeBSD!


2

Su Debian 7.0, 64-bit (Wheezy), esegui:

sudo apt-get install libpq-dev

Dopo aver installato libpq-dev correttamente, esegui:

bundle install

2

Sotto CentOS 6.5 (Squeeze) ho creato un file:

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

con contenuto:

pathmunge /usr/pgsql-9.3/bin

Nota qui, dovresti impostare il tuo percorso PostgreSQL con il file pg_config. Puoi trovarlo con il comando:

$ sudo find / -iname pg_config

Salva il file:

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

e prova a eseguire nuovamente il tuo comando.

Nota: ogni volta che si modifica la configurazione di Bash - modificando la configurazione di profilo.d - è necessario ricaricare Bash.


Come hai installato Postgres? Ho collegato simbolicamente gli pg_*script nel percorso in questo modo: ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin. Dopo di che non ho avuto bisogno di ulteriori script o variabili di ambiente.
JoePasq,

2

La posizione di libpq-fe.hdipende da dove si trova l'installazione di PostgreSQL (che dipende da come è stata installata). Usa locate( http://en.wikipedia.org/wiki/Locate_%28Unix%29 ) per trovare il libpq-fe.hfile sul tuo computer. Se esiste, sarà nella includedirectory della tua installazione PostgreSQL.

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

La bindirectory, che contiene pg_config, sarà nella stessa directory della includedirectory. Come suggerisce l'errore, usa l'opzione --with-pg-config per installare la gem:

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

Si noti che potrebbe essere necessario eseguire updatedbse non si è mai utilizzato locateo se non si è aggiornati dall'installazione di PostgreSQL.


Senza --prima --with-pg-config=...ho visualizzato un errore: ERRORE: Durante l'esecuzione gem ... (OptionParser :: InvalidOption) opzione non valida: --with-pg-config = / usr / bin / pg_config)
Alexis Wilke,

2

Alla fine ho risolto questo problema, ma non usando i metodi precedentemente descritti.

Usando brew install postgresql, scopro che era già stato installato, ma non collegato.

  1. Scopri dove è installato PostgreSQL ed eliminalo,

  2. Poi di brew install postgresqlnuovo

  3. brew link postgresql

  4. gem install pg


"brew link --force postgresql" ha funzionato per me, ma prima di dover eseguire 'export PATH = "/ usr/local/opt/postgresql@9.4/bin: $ PATH"' >> ~ / .bash_profile
Jagdish Narayandasani

2

Ho appena avuto questo su OSX in esecuzione brew e postgres@9.4.

La mia correzione era questa:

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

2

Ho avuto questo problema con Postgresql 9.6. Sono stato in grado di risolverlo facendo:

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

2

Ho riscontrato lo stesso errore con Postgres installato tramite Asdf. Le soluzioni pg-config non hanno funzionato per me. Invece ho dovuto individuare la cartella include di postgres che contiene il file ed eseguire il comando con il --with-pg-includeflag

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

1

Per AltLinuxil pacchetto postgresqlx.x-devel(nel mio caso postgresql9.5-devel) deve essere installato:

apt-get install postgresql9.5-devel

Puoi anche installare versioni specifiche con yum - yum install postgresqlxx-devel, ad esempio yum install postgresql94-devel
dworrad,

1

Ho risolto questo problema installando il pacchetto 'postgresql-common'. Questo pacchetto fornisce il file pg_configbinario che è molto probabilmente quello che ti mancava.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.