web-dev-qa-db-fra.com

Impossible de trouver la bibliothèque cliente PostgreSQL (libpq)

J'essaie d'installer PostgreSQL pour Rails sous Mac OS X 10.6. J'ai d'abord essayé l'installation de MacPorts mais cela ne s'est pas bien passé. J'ai donc effectué l'installation DMG en un clic. Cela a semblé fonctionner.

Je pense avoir besoin d'installer les packages de développement PostgreSQL, mais je ne sais pas comment faire cela sous OS X.

Voici ce que je reçois quand j'essaie de faire 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
145
Jason Swett

Solution: réinstaller PostgreSQL avec Homebrew.

18
Jason Swett
$ 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...

TRAVAILLÉ!

346

J'ai essayé la réponse la mieux notée ici:

env ARCHFLAGS="-Arch x86_64" gem install pg

Mais lorsque j'ai essayé d'exécuter à nouveau l'installation de bundles, la même erreur s'est produite. Ensuite, j'ai essayé l'installation complète du paquet avec ARCHFLAGS comme ceci:

ARCHFLAGS="-Arch x86_64" bundle install

Travaillé pour moi! Assurez-vous de remplacer x86_64 par i386 en fonction de votre architecture. 

77
Christine Loh

J'avais juste ce problème lorsque j'utilisais le fichier .dmg EnterpiseDB. Si c'est la même chose que vous avez utilisée, je l'ai fait en spécifiant la bonne architecture:

Sudo env ARCHFLAGS="-Arch i386" gem install pg

Il existe sur le Web des tutoriels qui spécifient une architecture différente (telle que "-Arch x86_64" pour les utilisateurs de MacPorts), mais cela ne fonctionnait pas car je n'utilisais que l'installation d'un seul fichier.

31
bobfet1

Si vous utilisez Yosemite:

brew install postgres

Ensuite:

ARCHFLAGS="-Arch x86_64" gem install pg

Et (facultatif) enfin, si vous voulez lancer autovacuum ...

postgres -D /usr/local/var/postgres
23
etusm

Peut-être que vous pouvez essayer celui-ci:

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

Pour connaître l'architecture de votre bibliothèque, vous pouvez utiliser

file /usr/local/lib/libpq.dylib 

qui n'a donné qu'une architecture dans mon cas (installée via homebrew):

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

Fake out gem en préfixant les variables d’environnement appropriées. Si vous avez installé à partir de MacPorts, vous devriez pouvoir suivre la procédure suivante:

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

À partir de là, sortez LIBDIR, INCLUDEDIR, CPPFLAGS, LIBS et LDFLAGS (celui qui, à mon avis, vous permettra de courir est LIBDIR, cependant). Ensuite, vous courriez:

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

Cela devrait le faire pour vous. Faites-moi savoir si ce n'est pas le cas.

5
Sean

Le problème que nous avons eu était assez étrange.

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

mais quand nous avons fait une installation de paquet en fait, le paquet n'a pas été installé pour la version de Ruby qui a été installée par rbenv. Par conséquent, lorsque nous avons saisi installation de paquet, il utilisait le paquet du système.

Avant d’exécuter l’installation d’un ensemble, assurez-vous que vous avez installé cet ensemble en exécutant

gem install bundler
5
Tibastral

Je ne pense pas que vous ayez besoin des fichiers de développement postgres, tout ce dont vous avez besoin aurait dû être inclus dans votre programme d'installation. Il est plus probable que le chemin d'installation ne soit pas dans le chemin de votre environnement et par conséquent, gem ne peut pas les trouver lorsqu'il tente de compiler pg.

Vous ne devriez pas avoir à exécuter gem install pg en tant que root. En fait, si vous le faites, il est probable que votre PATH (le chemin de la racine s'il est exécuté avec Sudo) ne contiendra pas les informations nécessaires.

Ce qui suit fonctionne habituellement pour moi:

# 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
3
Brett Bender

C'est finalement ce que j'ai fait pour moi (combinaison de plusieurs solutions fournies auparavant avec d'autres messages):

$ Sudo env ARCHFLAGS = "- Arch x86_64" pg de l'installation - with-pg-include =/Library/PostgreSQL/9.6/include /

3
Marcus Silveira

La réponse ARCHFLAGS que d'autres ont proposée ne fonctionnera pas si vous vous retrouviez avec une version 64 bits de postgres (que homebrew installera) et une version 32 bits de Ruby. Pour une raison quelconque, rbenv insiste sur la création de Ruby 1.9.2-p290 en tant que 32 bits, ce qui rend impossible la liaison contre les postgres de 64 bits.

Vérifiez l’architecture de votre binaire Ruby avec

file `which Ruby`

ou si vous utilisez rbenv

file `rbenv which Ruby`

Et comparez avec vos postgres:

file `which postgres`

En cas de problème, vous devrez réinstaller Postgres ou Ruby. Avec rbenv, j'ai résolu ce problème en passant à une autre version: 1.9.3-p194 au lieu de 1.9.2-p290.

1
Leopd

Donc en gros j'ai fait ça ;-)

brew install postgres
1
Jackie Chan

C'est comme ça que j'ai réussi à travailler sur Mavericks. Remarque: j’avais déjà installé postgresql 9.3 depuis homebrew.

  1. Mise à jour de Xcode vers 5.0 depuis l'App Store

  2. Installer des outils de développement en ligne de commande

    xcode-select --install

  3. Accepter la licence Xcode

    Sudo xcodebuild -license

  4. Installer gem

    ARCHFLAGS = "- Arch x86_64" gem install pg

1
Michał Szajbe

Je suis probablement un peu en retard à la fête ici, mais dans mon cas, j'utilisais Rbenv et la mise à niveau vers Ruby 2.2.3. Je devais installer Bundler pour que le mien fonctionne, j'avais une ancienne version du système.

gem install bundler

0
mchapman17

Sur Mac, vous pouvez essayer (fonctionne pour moi): Gem install pg - with-pg-include =/Bibliothèque/PostgreSQL/9.5/include Recherche: pg-1.0.0.gem (100%) Construire des extensions natives avec: 'with-pg-include =/Library/PostgreSQL/9.5/include' Cela pourrait prendre un certain temps ... Installation réussie de pg-1.0.0 Analyse pour pg-1.0.0 Installation de la documentation de ri pour pg-1.0.0 Terminé installation de la documentation pour pg après 3 secondes 1 gem installé

(cette partie "/Library/PostgreSQL/9.5/include" vous devez mettre votre chemin Postgres)

0
Marcos Riveros

Comme mentionné ci-dessus, cela a à voir avec le fait d'avoir deux arcs Ruby sur 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] ce que je devais faire était simplement d'installer pg gem forçant x86_64 Arch à utiliser avec cette commande:

Sudo env ARCHFLAGS="-Arch x86_64" gem install pg

N'oubliez pas d'avoir votre bash_profile à jour

Ajoutez le chemin de votre postgres, dans ce cas, utilisez l'application Postgres (OSX) au lieu de brew ( https://postgresapp.com/ ) par défaut, il s'agit de l'emplacement:

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

Recharger bash avec

Sudo vi ~/.bash_profile

Après avoir fait cela, j’ai finalement réussi à installer pg gem

J'espère que cela t'aides!

0
d1jhoni1b