Impossibile trovare la libreria client PostgreSQL (libpq)


146

Sto cercando di installare PostgreSQL per Rails su Mac OS X 10.6. Per prima cosa ho provato l'installazione di MacPorts ma non è andata bene, quindi ho fatto l'installazione DMG con un clic. Sembrava funzionare.

Sospetto di aver bisogno di installare i pacchetti di sviluppo PostgreSQL ma non ho idea di come farlo su OS X.

Ecco cosa ottengo quando provo a fare 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

Hai installato la versione 8.3 di postgresql o sta recuperando qualche vecchia installazione? Se è 8.3 le librerie dovrebbero essere in /Library/PostgreSQL/8.3/lib per favore controlla se c'è.
Eelke,

Ho fatto la versione 8.3 e, sì, sembra che tutto sia lì.
Jason Swett,

Puoi pubblicare l'output di pg_config? Ciò dovrebbe aiutarci più facilmente.
justis,

Ho dovuto aggiungere la versione -v '0.14.0' in modo che funzionasse con il progetto mu
Matthieu Rouif

Risposte:


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

LAVORATO!


2
Ho dovuto aggiungere la versione "env ARCHFLAGS =" - arch x86_64 "gem install -v '0.14.0'" in modo che funzionasse con il mio progetto
Matthieu Rouif,

6
Ha funzionato per OS X Mavericks. Per me, è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
E se usi "Postgres.app", sotto i maverick, dovresti farlo: env ARCHFLAGS = "- arch x86_64 gem install pg - --with-pg-config = / Applicazioni / Postgres.app / Sommario / Versioni / 9.3 / bin / pg_config (Supponi di utilizzare Postgres.app versione 9.3, perché la posizione di pg_config potrebbe essere cambiata se usi una versione diversa, ma comunque la trovi)
Zhaonan,

2
Questo ha funzionato per me e ha interrotto un'interruzione di 2 ore. Sono nuovo alle guide e questo è stato frustrante. Come il commentatore precedente, stavo usando il programma di installazione Postgres.app su Mavericks. Non rendersi conto che la variabile env di ARCHFLGS era così importante. Spiegazione qui.
GNat,

3
La domanda è: perché funziona? Cosa fa "ARCHFLAGS =" - arch x86_64 ", e perché l'installazione della gemma di vaniglia non funziona? Non dovrebbe essere così complicato installare una gemma.
Jared Menard,

78

Ho provato la risposta più votata qui:

env ARCHFLAGS="-arch x86_64" gem install pg

Ma quando ho provato a eseguire nuovamente l'installazione del bundle, si è verificato lo stesso errore. Quindi ho provato a installare l'intero bundle con ARCHFLAGS in questo modo:

ARCHFLAGS="-arch x86_64" bundle install

Ha funzionato per me! Assicurati di sostituire x86_64 con i386 a seconda dell'architettura che hai.


2
Grazie mille. Questo è ciò che ha funzionato per me. Ho cercato di risolvere questo problema per un'ora in più, e questo codice è quello che ha fatto - ARCHFLAGS = "- arch x86_64" bundle install
piratetone

L 'aggiunta di @piratetone qui ha funzionato per me su High Sierra
funzionato il

Apprezzato per @Christine, ha funzionato per me su High Sierra
Ymow Wu

31

Stavo avendo questo problema durante l'uso di EnterpiseDB .dmg. Se è la stessa cosa che hai usato, l'ho fatto funzionare specificando l'architettura giusta:

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

Ci sono alcuni tutorial sul web che dicono di specificare un'architettura diversa (come "-arch x86_64" per le persone che hanno usato MacPorts) ma non ha funzionato per me perché ho usato l'installazione a file singolo.


6
x86_64 ha funzionato per me (Mac OS 10.6.8, PostgreSQL installato tramite homebrew: mxcl.github.com/homebrew )
chesterbr

2
Ho usato ore per trovare una soluzione e la tua ha funzionato, bobfet1 & @chester. Grazie! :-))) ** sudo env ARCHFLAGS = "- arch x86_64" gem install pg **
rassom

24

Se si utilizza Yosemite:

brew install postgres

Poi:

ARCHFLAGS="-arch x86_64" gem install pg

E (facoltativo) finalmente, se vuoi avviare autovacuum ...

postgres -D /usr/local/var/postgres

21

Forse puoi provare questo:

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

Per conoscere l'architettura della tua biblioteca puoi usare

file /usr/local/lib/libpq.dylib 

che ha dato solo 1 architettura nel mio caso (installato tramite homebrew):

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

+1 Grazie per il suggerimento di sapere quale architettura fosse la mia biblioteca!
Spike

Controlla anche l'architettura del tuo binario ruby.
Leopd,

18

Soluzione: reinstallato PostgreSQL con Homebrew.


1
Congratulazioni! Ricorda di assegnare la taglia a qualcuno. Alcune persone hanno cercato duramente di aiutare, anche se non era la soluzione finale, e i punti reputazione erano già stati spesi quando hai offerto la taglia.
justis,

2
Non sono sicuro del perché questo abbia un -1, ha funzionato per me quando nessuno degli altri metodi ha funzionato
Abe Petrillo,

Ho anche finito per usare il metodo ARCHFLAGS, ma non ha funzionato fino a dopo aver reinstallato postresql con homebrew.
Dave Cowart,

Ha lavorato per Yosemite (10.10.3). brew install PostgreSQL
roosevelt

Questo non ha funzionato per me. Mi chiedo se ha qualcosa a che fare con il fatto che sto usando il Ruby "incorporato" (penso) invece di qualsiasi altra cosa: |
rogerdpack,

6

Falsifichi gemprefissando le variabili d'ambiente appropriate. Se esegui l'installazione da MacPorts, dovresti essere in grado di seguire la seguente procedura:

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

Da lì, tirare fuori il LIBDIR, INCLUDEDIR, CPPFLAGS, LIBSe LDFLAGS(quello che penso ti porterà in esecuzione è LIBDIR, comunque). Quindi eseguiresti:

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

Questo dovrebbe farlo per te. Fammi sapere se non lo fa.


Ho usato il programma di installazione con un clic invece di MacPorts per PostgreSQL. Non so quale sarebbe il comando equivalente.
Jason Swett,

Vedi se sei fortunato con questo (penso che lo script aggiornato di Mac venga eseguito sabato sera):locate pg_config
Sean,

Non so ancora cosa significherebbe CPPFLAGSo LDFLAGS(non so cosa siano, scusa).
Jason Swett,

Oh, ma locate pg_configmi ha mostrato delle cose, comunque. E ho provato a installare PostgreSQL tramite MacPorts e usando il tuo comando - non ha funzionato.
Jason Swett,

1
Aggiornato l'esempio sopra. Credo che questo risolverà il tuo problema. Il problema era che LDFLAGSnon era impostato sulla directory che conteneva libpq. Vedi sopra per i dettagli.
Sean,

5

Il problema che abbiamo avuto è stato piuttosto strano.

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

ma quando abbiamo fatto un'installazione bundle, infatti, bundler non è stato installato per la versione di ruby ​​installata da rbenv, quindi, quando abbiamo digitato bundle install, ha usato il bundler del sistema.

Quindi, prima di eseguire l'installazione del bundle, assicurarsi di aver installato il bundler eseguendo

gem install bundler

Questo ha funzionato nel mio caso (macOS High Sierra fresco, usando rbenv e installandolo principalmente con brew). Probabilmente il bundle stava usando cose di Apple, questo era il problema ...
saza,

3

Non penso che tu abbia bisogno dei file di sviluppo di Postgres, tutto ciò di cui hai bisogno avrebbe dovuto essere incluso nel tuo programma di installazione. È più probabile che il percorso in cui sono installati non si trovi nel percorso dell'ambiente e quindi gem non riesca a trovarli quando tenta di compilare pag.

Non dovresti correre gem install pgcome root, infatti se lo fai è probabile che il tuo PATH (il PATH di root se eseguito con sudo) non conterrà le informazioni necessarie.

Di solito funziona per me:

# 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

L'esecuzione gem install pg(insieme ai due comandi precedenti) invece di sudo gem install pgdare sempre gli stessi esatti risultati.
Jason Swett,

Sei su un'architettura a 32 o 64 bit? Hai provato quanto sopra con l'altra bandiera dell'architettura? Hai anche cambiato /Library/PostgreSQL/...la posizione corretta di dovunque sia la tua copia dell'installazione di Postgres?
Brett Bender,

Ho esaminato le mie note su come eseguire i comandi che ho elencato. Sembra che abbia installato Postgres tramite sudo port install postgresql83 postgresql83-server, simile a queste istruzioni: flux88.com/2010/06/installing-postgresql-for-rails-on-mac-os-x . Sembra che il programma di installazione standalone sia a 32 bit, quindi si desidera impostare i flag arch su 32 bit anche se il computer è a 64 bit. Se non riesci a farlo funzionare, suggerirei di disinstallare e reinstallare tramite MacPorts, quindi di provare le istruzioni sopra. Spero che aiuti!
Brett Bender,

3

Questo è quello che finalmente ha fatto per me (combinazione di più soluzioni fornite prima insieme ad altri post):

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


La soluzione sopra ha funzionato per me in Mac OS High Sierra sudo env ARCHFLAGS = "- arch x86_64" gem install pg -v '1.1.2' - con-pg-include = / usr / local / Cellar / postgresql / 10.5 / include Individua il percorso esatto per la cartella include e aggiornalo di conseguenza.
maniempire

1

La ARCHFLAGSrisposta che altri hanno proposto non funzionerà se in qualche modo sei finito con una versione a 64 bit di Postgres (che homebrew installerà) e una versione a 32 bit di ruby. Per qualche motivo rbenvinsiste sulla costruzione di ruby ​​1.9.2-p290 come 32-bit per me, il che rende impossibile il collegamento con postgres a 64-bit.

Controlla l'architettura del tuo binario ruby ​​con

file `which ruby`

o se si utilizza rbenv

file `rbenv which ruby`

E confronta con i tuoi postgres:

file `which postgres`

In caso di disallineamento dovrai reinstallare Postgres o Ruby. Con rbenv ho risolto questo problema semplicemente passando a una versione diversa: 1.9.3-p194anziché 1.9.2-p290.


1

È così che sono riuscito a lavorare su Mavericks. Nota: avevo già installato postgresql 9.3 da homebrew.

  1. Aggiorna Xcode a 5.0 dall'App Store

  2. Installa gli strumenti per sviluppatori da riga di comando

    xcode-select --install

  3. Accetta la licenza Xcode

    sudo xcodebuild -license

  4. Installa gemma

    ARCHFLAGS = "- arch x86_64" gem install pag



0

Probabilmente sono un po 'in ritardo alla festa qui, ma nel mio caso stavo usando rbenv e aggiornando a Ruby 2.2.3. Ho dovuto installare Bundler per far funzionare la mia, avevo una vecchia versione del sistema.

gem install bundler


0

Come accennato in precedenza, ciò ha a che fare con il fatto di avere due archi di rubino su 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]quello che dovevo fare era semplicemente installare pggem forcing x86_64arch per essere usato con questo comando:

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

Ricorda di essere bash_profileaggiornato

Aggiungi il percorso dei tuoi postgres, in questo caso sto usando l'app Postgres ( OSX) anziché brew( https://postgresapp.com/ ) per impostazione predefinita questa è la posizione:

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

Ricarica bash con

sudo vi ~/.bash_profile

Dopo averlo fatto sono stato finalmente in grado di installare con successo pg gem

Spero che questo ti aiuti!


0

Su Mac puoi provare questo (funziona per me): gem install pg - with-pg-include = / Library / PostgreSQL / 9.5 / include Fetching: pg-1.0.0.gem (100%) Creazione di estensioni native con: ' with-pg-include = / Library / PostgreSQL / 9.5 / include 'Questo potrebbe richiedere del tempo ... Installazione riuscita pg-1.0.0 Documentazione di analisi per pg-1.0.0 Installazione della documentazione ri per pg-1.0.0 Fine installazione della documentazione per pg dopo 3 secondi 1 gemma installata

(questa parte "/Library/PostgreSQL/9.5/include" devi inserire il tuo percorso Postgres)

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.