No se puede encontrar la biblioteca de cliente de PostgreSQL (libpq)

Estoy tratando de instalar PostgreSQL for Rails en Mac OS X 10.6. Primero probé la instalación de MacPorts pero no funcionó, así que hice la instalación de DMG con un solo clic. Eso pareció funcionar.

Sospecho que necesito instalar los paquetes de desarrollo de PostgreSQL, pero no tengo idea de cómo hacerlo en OS X.

Esto es lo que obtengo cuando bash hacer 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... 

¡TRABAJÓ!

Intenté la mejor respuesta aquí:

 env ARCHFLAGS="-arch x86_64" gem install pg 

Pero cuando intenté ejecutar bundle install nuevamente, tuve el mismo error. Luego probé todo el paquete de instalación con ARCHFLAGS así:

 ARCHFLAGS="-arch x86_64" bundle install 

¡Trabajó para mi! Asegúrese de reemplazar x86_64 con i386 según la architecture que tenga.

Solo estaba teniendo este problema cuando uso el .dmg de EnterpiseDB. Si eso es lo mismo que piensas que usaste, lo hice funcionar especificando la architecture correcta:

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

Hay algunos tutoriales en la web que dicen especificar una architecture diferente (como “-arch x86_64” para las personas que usan MacPorts) pero no funcionaba para mí porque utilicé la instalación de un solo archivo.

Si usa Yosemite:

 brew install postgres 

Entonces:

 ARCHFLAGS="-arch x86_64" gem install pg 

Y (opcional) finalmente, si quieres iniciar autovacuum …

 postgres -D /usr/local/var/postgres 

Quizás puedas probar este:

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

Para conocer la architecture de tu biblioteca puedes usar

 file /usr/local/lib/libpq.dylib 

que dio solo 1 architecture en mi caso (instalado a través de homebrew):

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

Solución: se reinstaló PostgreSQL con Homebrew.

Fake out gem prefijando las variables de entorno apropiadas. Si estaba instalando desde MacPorts, debería poder seguir el siguiente procedimiento:

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

A partir de ahí, extraiga el LIBDIR , LIBDIR , CPPFLAGS , LIBS y LDFLAGS (sin LDFLAGS el que creo que lo ejecutará es LIBDIR ). Entonces correría:

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

Eso debería hacerlo por ti. Avísame si no es así.

El problema que tuvimos fue bastante extraño.

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

pero cuando hicimos un paquete de instalación de hecho, no se instaló el paquete para la versión de ruby ​​que fue instalada por rbenv, entonces, cuando escribimos bundle install, usó el paquete del sistema.

Por lo tanto, antes de ejecutar la instalación del paquete, asegúrese de haber instalado el paquete ejecutando

 gem install bundler 

No creo que necesite los archivos de desarrollo de Postgres, todo lo que necesita debe haber sido incluido con su instalador. Es más probable que la ruta a la que están instalados no se encuentre en la ruta de su entorno y, por lo tanto, la gem no puede encontrarlos cuando intenta comstackr la pg.

No debería tener que ejecutar gem install pg como root; de hecho, si lo hace, es probable que su PATH (la RUTA de la raíz si se ejecute con sudo) no contenga la información necesaria.

Lo siguiente generalmente me funciona:

 # 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 

Esto es lo que finalmente hizo por mí (combinación de múltiples soluciones proporcionadas anteriormente junto con otras publicaciones):

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

La respuesta de ARCHFLAGS que otros han propuesto no funcionará si de alguna manera terminaste con una versión de 64 bits de postgres (que homebrew instalará) y una versión de 32 bits de ruby. Por alguna razón, rbenv insiste en construir ruby ​​1.9.2-p290 como 32 bits para mí, lo que hace que sea imposible enlazar con postgres de 64 bits.

Verifica la architecture de tu binario ruby ​​con

 file `which ruby` 

o si usa rbenv

 file `rbenv which ruby` 

Y compare contra su postgres:

 file `which postgres` 

Si hay un desajuste, tendrás que volver a instalar postgres o ruby. Con rbenv resolví esto simplemente cambiando a una versión diferente: 1.9.3-p194 vez de 1.9.2-p290 .

Así es como lo hice para trabajar en Mavericks. Nota: Ya había instalado postgresql 9.3 desde homebrew.

  1. Actualice Xcode a 5.0 desde App Store

  2. Instalar herramientas de desarrollador de línea de comando

    xcode-select –install

  3. Aceptar la licencia de Xcode

    sudo xcodebuild -license

  4. Instalar gem

    ARCHFLAGS = “- arch x86_64” joya instalar pg

Así que, básicamente, hice esto 😉

 brew install postgres 

Probablemente llegue un poco tarde a la fiesta aquí, pero en mi caso estaba usando rbenv y actualizando a Ruby 2.2.3. Tuve que instalar Bundler para que el mío funcionara, tenía una versión anterior del sistema.

gem install bundler

Como se mencionó anteriormente, esto tiene que ver con el hecho de tener dos arcos de Ruby en 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] lo que tenía que hacer era simplemente instalar pg gem forcing x86_64 arch para usar con este comando:

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

Recuerde tener su bash_profile actualizado

Agregue la ruta de su postgres, en este caso estoy usando la aplicación Postgres ( OSX ) en lugar de brew ( https://postgresapp.com/ ) por defecto esta es la ubicación:

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

Recargar Bash con

sudo vi ~/.bash_profile

Después de hacer esto, pude finalmente instalar con éxito la pg gem

¡Espero que esto ayude!

En Mac puedes probar esto (funciona para mí): gem install pg – with-pg-include = / Library / PostgreSQL / 9.5 / include Fetching: pg-1.0.0.gem (100%) Creando extensiones nativas con: ‘ with-pg-include = / Library / PostgreSQL / 9.5 / include ‘Esto podría llevar un tiempo … Instalado correctamente pg-1.0.0 Documentación de análisis para pg-1.0.0 Instalación de la documentación de ri para pg-1.0.0 Terminada la instalación de la documentación para pg después de 3 segundos 1 joya instalada

(esta parte “/Library/PostgreSQL/9.5/include” debe poner su ruta Postgres)