Imansible trovare la libreria client PostgreSQL (libpq)

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.

Ho il sospetto che ho bisogno di installare i pacchetti di sviluppo di 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 

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

Ho provato la risposta più votata qui:

 env ARCHFLAGS="-arch x86_64" gem install pg 

Ma quando ho provato a eseguire l’installazione di bundle di nuovo, ha avuto lo stesso errore. Poi ho provato l’intera installazione di 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.

Stavo avendo questo problema quando utilizzo il file .dmg di EnterpiseDB. 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 usano MacPorts) ma non ha funzionato per me perché ho usato l’installazione di un singolo file.

Se si utilizza Yosemite:

 brew install postgres 

Poi:

 ARCHFLAGS="-arch x86_64" gem install pg 

E (facoltativo) infine, se vuoi lanciare autovacuum …

 postgres -D /usr/local/var/postgres 

Forse puoi provare questo:

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

Per conoscere l’architettura della tua libreria 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 

Soluzione: reinstallato PostgreSQL con Homebrew.

Fake gem prefiggendo le variabili d’ambiente appropriate. Se stavi effettuando 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ì, estrai LIBDIR , INCLUDEDIR , CPPFLAGS , LIBS e LDFLAGS (quello che penso possa farti funzionare è 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 è così.

Il problema che abbiamo avuto è stato piuttosto strano.

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

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

Quindi, prima di eseguire l’installazione di bundle, assicurati di aver installato bundler eseguendo

 gem install bundler 

Non penso che ti servano i file di sviluppo di Postgres, tutto quello che ti serve dovrebbe essere incluso nel tuo programma di installazione. È più probabile che il percorso su cui sono installati non si trovi nel percorso dell’ambiente e quindi gem non possa trovarli quando tenta di compilare pg.

Non dovresti eseguire gem install pg come root, infatti se lo fai è probabile che il tuo PATH (PATH di root se eseguito w / sudo) non contenga le informazioni necessarie.

Il seguente 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 

Questo è ciò 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 – con-pg-include = / Library / PostgreSQL / 9.6 / include /

La risposta di ARCHFLAGS che altri hanno proposto non funzionerà se in qualche modo si finisce con una versione di postgres a 64 bit (che installerà homebrew) e una versione di ruby ​​a 32 bit. Per qualche ragione rbenv insiste sulla creazione di Ruby 1.9.2-p290 come 32-bit per me, il che rende imansible il collegamento a post-bit a 64 bit.

Controlla l’architettura del tuo ruby binario con

 file `which ruby` 

o se si utilizza rbenv

 file `rbenv which ruby` 

E confronta i tuoi postgres:

 file `which postgres` 

Se c’è una corrispondenza errata, devi reinstallare postgres o ruby. Con rbenv ho risolto questo solo passando a una versione diversa: 1.9.3-p194 invece di 1.9.2-p290 .

Questo è come ho fatto a lavorare su Mavericks. Nota: avevo già installato postgresql 9.3 da homebrew.

  1. Aggiorna Xcode a 5.0 da App Store

  2. Installa strumenti di sviluppo da riga di comando

    xcode-select –install

  3. Accetta la licenza Xcode

    sudo xcodebuild -license

  4. Installa gem

    ARCHFLAGS = “- arch x86_64” gem install pg

Quindi in pratica l’ho fatto 😉

 brew install postgres 

Sono probabilmente un po ‘in ritardo per la festa qui, ma nel mio caso stavo usando rbenv e l’aggiornamento a Ruby 2.2.3. Ho dovuto installare Bundler per far funzionare la mia, avevo una vecchia versione di sistema.

gem install bundler

Come detto sopra, questo ha a che fare con il fatto di avere due ruby ​​arch 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 pg gem forcing dell’arco x86_64 da usare con questo comando:

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

Ricordati di avere il tuo bash_profile aggiornato

Aggiungi il percorso dei tuoi postgres, in questo caso im usando Postgres app ( OSX ) invece di 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 riuscito a installare finalmente pg gem

Spero che questo ti aiuti!

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 un po’ di tempo … Installato con successo pg-1.0.0 Documentazione di analisi per pg-1.0.0 Installare documentazione di ri per pg-1.0.0 Fatto l’installazione della documentazione per pg dopo 3 secondi 1 gem installato

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