[ruby-on-rails] Impossible de trouver l'en-tête 'libpq-fe.h en essayant d'installer pg gem



14 Answers

Sur macOS (précédemment Mac OS X et OS X ), utilisez Homebrew pour installer les en-têtes appropriés:

brew install postgresql

puis en cours d'exécution

gem install pg

devrait marcher.

Question

J'utilise la version pré Ruby on Rails 3.1. J'aime utiliser PostgreSQL, mais le problème est d'installer le pg gem. Cela me donne l'erreur suivante:

$ 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

Comment puis-je résoudre ce problème?




La bonne réponse pour les utilisateurs de Mac avec Postgres.app est de construire contre la libpq fournie avec ce paquet. Par exemple, avec la version 9.4 (actuelle à ce jour), tout ce dont vous avez besoin est:

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

Cela gardera votre pg gem en synchronisation avec exactement la version de PostgreSQL que vous avez installée. Installer quelque chose de Homebrew est une perte dans ce cas.




J'ai trouvé cette réponse, et c'était la seule qui a fonctionné pour moi (Mac OS) - après avoir fait des recherches pendant environ deux jours:

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

Voir la question Dépassement de pile Impossible de trouver la bibliothèque client PostgreSQL (libpq) .




Sur un Mac, je l'ai résolu en utilisant ce code:

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



J'ai finalement résolu ce problème, mais ne pas utiliser les méthodes décrites précédemment.

En utilisant brew install postgresql , je découvre qu'il a déjà été installé, mais pas lié.

  1. Découvrez où PostgreSQL est installé et supprimez-le,

  2. Puis brew install postgresql nouveau brew install postgresql ,

  3. brew link postgresql

  4. gem install pg




Je pourrais résoudre cela d'une autre manière. Je n'ai pas trouvé la bibliothèque sur mon système. Je l'ai donc installé en utilisant une application du site principal de PostgreSQL. Dans mon cas (OS X) j'ai trouvé le fichier sous /Library/PostgreSQL/9.1/include/ une fois l'installation terminée. Vous pouvez également avoir le fichier ailleurs en fonction de votre système si vous avez déjà installé PostgreSQL.

Merci à ce lien sur la façon d'ajouter un chemin supplémentaire pour l'installation de gem , je pourrais diriger la gemme vers la lib avec cette commande:

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

Après cela, cela fonctionne, car il sait maintenant où trouver la bibliothèque manquante. Il suffit de remplacer le chemin avec le bon emplacement pour votre libpq-fe.h




Une réponse plus générale pour toute distribution basée sur Debian (qui inclut Ubuntu) est la suivante. D'abord, installez le paquet apt-file en tant que root:

apt-get install apt-file

Cela vous permet de rechercher des paquets contenant un fichier. Ensuite, mettez à jour sa base de données en utilisant

apt-file update

(Cela peut être exécuté en tant qu'utilisateur normal). Ensuite, recherchez l'en-tête manquant en utilisant:

apt-file search libpq-fe.h

Sur ma machine, cela donne:

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

Voilà !




Je cours Postgres.app sur un Mac et je devais

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

premier. alors

bundle install

travaillé pour moi.




Pour CentOS 6.4,

yum install postgresql-devel
gem install pg

a bien fonctionné!




J'avais un problème similaire, et cela m'a arrangé:

gem install do_postgres -- --with-pgsql-server-dir=/Applications/Postgres.app/Contents/MacOS --with-pgsql-server-include=/Applications/Postgres.app/Contents/MacOS/include/server

La source:

https://gist.github.com/oisin/6562181




Dans mon cas c'était le paquet postgresql-server-dev-8.4 (je suis sur 11.04 (Natty Narwhal), 64 bits).




L'emplacement de libpq-fe.h dépend de l'emplacement de votre installation de PostgreSQL (ce qui dépend de la façon dont vous l'avez installé). Utilisez locate ( http://en.wikipedia.org/wiki/Locate_%28Unix%29 ) pour trouver le fichier libpq-fe.h sur votre machine. S'il existe, il sera dans le répertoire include de votre installation de PostgreSQL.

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

Le répertoire bin , qui contient pg_config , sera dans le même répertoire que le répertoire include . Comme l'erreur le suggère, utilisez l'option --with-pg-config pour installer la gem:

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

Notez que vous devrez peut-être exécuter updatedb si vous n'avez jamais utilisé locate ou si vous n'avez pas mis à jour depuis l'installation de PostgreSQL.




Pour MacOS sans installer le serveur PostgreSQL:

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



Sur Debian 7.0, 64 bits (Wheezy), exécutez simplement:

sudo apt-get install libpq-dev

Après avoir installé libpq-dev, lancez:

bundle install



Pour AltLinux le paquet postgresqlx.x-devel (dans mon cas, postgresql9.5-devel ) doit être installé:

apt-get install postgresql9.5-devel





Related