web-dev-qa-db-fra.com

gem install pg ne fonctionne pas sous OSX Lion

Il y a des variantes de cette question qui tournent autour de SO, mais aucune d'entre elles ne semble avoir de réponse qui puisse résoudre mon problème.

J'utilise OSX Lion (10.7.3). Le dernier XCode est installé.

J'ai installé Postgres en utilisant le paquet Postgres.app de postgresapp.com. 

Mais quand j'essaye d'installer le gem pg, j'obtiens un échec:

$ gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
Building native extensions.  This could take a while...
ERROR:  Error installing pg:
    ERROR: Failed to build gem native extension.

        /Users/disaacs/.rvm/rubies/Ruby-1.9.3-p125/bin/Ruby extconf.rb --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
Using config values from /Applications/Postgres.app/Contents/MacOS/bin/pg_config
checking for libpq-fe.h... *** 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
    --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=/Users/disaacs/.rvm/rubies/Ruby-1.9.3-p125/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
/Users/disaacs/.rvm/rubies/Ruby-1.9.3-p125/lib/Ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
    from /Users/disaacs/.rvm/rubies/Ruby-1.9.3-p125/lib/Ruby/1.9.1/mkmf.rb:506:in `try_cpp'
    from /Users/disaacs/.rvm/rubies/Ruby-1.9.3-p125/lib/Ruby/1.9.1/mkmf.rb:970:in `block in find_header'
    from /Users/disaacs/.rvm/rubies/Ruby-1.9.3-p125/lib/Ruby/1.9.1/mkmf.rb:790:in `block in checking_for'
    from /Users/disaacs/.rvm/rubies/Ruby-1.9.3-p125/lib/Ruby/1.9.1/mkmf.rb:284:in `block (2 levels) in postpone'
    from /Users/disaacs/.rvm/rubies/Ruby-1.9.3-p125/lib/Ruby/1.9.1/mkmf.rb:254:in `open'
    from /Users/disaacs/.rvm/rubies/Ruby-1.9.3-p125/lib/Ruby/1.9.1/mkmf.rb:284:in `block in postpone'
    from /Users/disaacs/.rvm/rubies/Ruby-1.9.3-p125/lib/Ruby/1.9.1/mkmf.rb:254:in `open'
    from /Users/disaacs/.rvm/rubies/Ruby-1.9.3-p125/lib/Ruby/1.9.1/mkmf.rb:280:in `postpone'
    from /Users/disaacs/.rvm/rubies/Ruby-1.9.3-p125/lib/Ruby/1.9.1/mkmf.rb:789:in `checking_for'
    from /Users/disaacs/.rvm/rubies/Ruby-1.9.3-p125/lib/Ruby/1.9.1/mkmf.rb:969:in `find_header'
    from extconf.rb:40:in `<main>'


Gem files will remain installed in /Users/disaacs/.rvm/gems/Ruby-1.9.3-p125/gems/pg-0.13.2 for inspection.
Results logged to /Users/disaacs/.rvm/gems/Ruby-1.9.3-p125/gems/pg-0.13.2/ext/gem_make.out

Le résultat de la commande /Applications/Postgres.app/Contents/MacOS/bin/pg_config est le suivant:

$ /Applications/Postgres.app/Contents/MacOS/bin/pg_config
BINDIR = /Applications/Postgres.app/Contents/MacOS/bin
DOCDIR = /Applications/Postgres.app/Contents/MacOS/share/doc
HTMLDIR = /Applications/Postgres.app/Contents/MacOS/share/doc
INCLUDEDIR = /Applications/Postgres.app/Contents/MacOS/include
PKGINCLUDEDIR = /Applications/Postgres.app/Contents/MacOS/include
INCLUDEDIR-SERVER = /Applications/Postgres.app/Contents/MacOS/include/server
LIBDIR = /Applications/Postgres.app/Contents/MacOS/lib
PKGLIBDIR = /Applications/Postgres.app/Contents/MacOS/lib
LOCALEDIR = /Applications/Postgres.app/Contents/MacOS/share/locale
MANDIR = /Applications/Postgres.app/Contents/MacOS/share/man
SHAREDIR = /Applications/Postgres.app/Contents/MacOS/share
SYSCONFDIR = /Applications/Postgres.app/Contents/MacOS/etc
PGXS = /Applications/Postgres.app/Contents/MacOS/lib/pgxs/src/makefiles/pgxs.mk
CONFIGURE = '--prefix=/Users/mattt/Code/heroku/Postgres/Postgres/Vendor/postgres' '--enable-thread-safety' '--with-openssl' '--with-gssapi' '--with-bonjour' '--with-krb5' '--with-libxml' '--with-libxslt' '--with-ossp-uuid' '--with-Perl' '--with-python'
CC = gcc
CPPFLAGS = -I/usr/include/libxml2
CFLAGS = -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv
CFLAGS_SL = 
LDFLAGS = -Wl,-dead_strip_dylibs
LDFLAGS_EX = 
LDFLAGS_SL = 
LIBS = -lpgport -lxslt -lxml2 -lssl -lcrypto -lgssapi_krb5 -lz -lreadline -lm 
VERSION = PostgreSQL 9.1.3

Tous ces paramètres semblent être corrects, à l'exception de la variable CONFIGURE (qui semble faire référence à un autre ordinateur - je n'ai pas d'utilisateur nommé mattt).

Le contenu du fichier mkmf.log est

"/usr/bin/gcc-4.2 -o conftest -I/Users/disaacs/.rvm/rubies/Ruby-1.9.3-p125/include/Ruby-1.9.1/x86_64-darwin10.8.0 -I/Users/disaacs/.rvm/rubies/Ruby-1.9.3-p125/include/Ruby-1.9.1/Ruby/backward -I/Users/disaacs/.rvm/rubies/Ruby-1.9.3-p125/include/Ruby-1.9.1 -I. -I/Users/disaacs/.rvm/usr/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE   -I/Applications/Postgres.app/Contents/MacOS/include  -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration  -fno-common -pipe conftest.c  -L. -L/Users/disaacs/.rvm/rubies/Ruby-1.9.3-p125/lib -L/Users/disaacs/.rvm/usr/lib -L. -L/usr/local/lib -L/Applications/Postgres.app/Contents/MacOS/lib     -lruby.1.9.1  -lpthread -ldl -lobjc "
checked program was:
/* begin */
1: #include "Ruby.h"
2:
3: int main() {return 0;}
/* end */

Toute suggestion serait appréciée.

J'ai consulté le fichier extconf.rb et, après un certain débogage, j'ai découvert qu'il s'agissait d'un appel à 

find_header ('libpq-fe.h')

c'est échouer. Pas parce que libpq-fe.h n'y est pas, mais parce que la méthode find_header elle-même échoue. J'ai essayé de lancer find_header en utilisant irb et j'ai eu la même erreur:

$ irb
1.9.3-p125 :001 > require 'mkmf'
 => true 
1.9.3-p125 :002 > find_header 'libpq-fe.h'
checking for libpq-fe.h... RuntimeError: The compiler failed to generate an executable file.
You have to install development tools first.

MODIFIER:

J'ai découvert que mon ordinateur devait être encore plus bouleversé que je ne le pensais. Je faisais une installation groupée pour un autre projet et j'ai eu un échec très similaire lors de l'installation de la pierre précieuse sqlite3.

checking for sqlite3.h... *** extconf.rb failed ***

Je n'ai jamais eu de problèmes avec la gem sqlite3 dans le passé.

30
Dave Isaacs

J'ai enfin trouvé la cause du problème! Bien que je sois encore incertain de l’origine de ce problème.

Examinez le contenu du fichier mkmf.log créé lorsque ma commande d'installation échoue (voir mon message d'origine). Il enregistre une tentative d'exécution de la commande suivante

/usr/bin/gcc-4.2 ...and so on...

Il n'y a pas de /usr/bin/gcc-4.2 sur mon système. Il existe une gcc, liée symboliquement à llvm-gcc-4.2. Ma solution était de créer un autre lien symbolique

Sudo ln -s llvm-gcc-4.2 gcc-4.2 

Après avoir établi ce lien, ma commande gem install pg a fonctionné sans problème.

J'ai trouvé la solution à ce problème sur le blog de Frozen Canuck dans l'article Erreur lors de l'installation de Ruby Gem avec l'extension C . Il spécule que le problème peut être causé par des versions conflictuelles de XCode. quelle que soit la cause, mes remerciements éternels!

62
Dave Isaacs

Sur OS X Mavericks

Sudo ln -s /usr/bin/llvm-gcc /usr/bin/gcc-4.2

travaux.

19
guapolo

J'ai eu un problème similaire. Suite à une réponse de bobfet1 pour un problème similaire j’ai pu installer la gemme de

Sudo env ARCHFLAGS="-Arch x86_64" gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
15
spirossi

Merci à ce gars: http://www.computersnyou.com/2025/

Sur Mavericks, utilisez: xcode-select --install (en supposant que vous avez installé Xcode depuis l’App Store).

13
pjammer

L'installation de xcode à partir de l'App Store ne suffit pas. Vous aurez également besoin des outils de ligne de commande de xcode. https://developer.Apple.com/library/ios/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_3.html

Après avoir installé xcode depuis l'App Store, ouvrez xcode . Goto Xcode-> Ouvrez l'Outil de développement-> Autres outils de développement Téléchargez et installez les derniers outils de ligne de commande.

Ouvrez une fenêtre de terminal et exécutez: Sudo gem install pg

7
Brandon Kearby

Problème similaire sur Mavericks 10.9 - mais il était causé par l’absence d’acceptation du contrat de licence Xcode. Blech.

Exécutez Sudo xcodebuild et acceptez les fichiers indésirables. Le tout fonctionne comme prévu.

6
trisweb

J'ai également rencontré ce problème, pour moi la réponse était de mettre à jour RVM de toutes choses. 

rvm get head
rvm install 1.9.2
2
philoye

Moi aussi, je suis sur Mountain Lion, en plus du "Sudo ln -s /usr/bin/{llvm- ,Buchgcc-4.2" suggéré par @grilix, je devais faire:

Sudo ln -s /usr/bin/{llvm-,}g++-4.2
2
izilotti

Après une mise à niveau Mavericks ... 

Réinstallez votre version de Ruby.

rvm uninstall 1.9.2-p320

puis

rvm install 1.9.2-p320

ou quelle que soit la version de Ruby que vous avez.

2
Kevin Monk
$ gem install pg

Si cela échoue:

$ Sudo gem install pg

Ensuite, si cela échouait:

$ Sudo find / -name “pg_config”

Une fois que vous avez trouvé l'emplacement de pg_config, lancez ceci pour l'installer enfin:

$ Sudo gem install pg --with-pg-config=/usr/local/Cellar/postgresql/9.5.1/bin/pg_config

Bien sûr, vous voudrez changer le chemin où vous avez trouvé pg_config.

Ensuite, vérifiez vos gemmes installées avec gem list, et il devrait montrer quelque chose comme ça:

<code>gem list</code> showing the right things

Plus d'informations peuvent être trouvées dans mon guide .

1
Naveen Segaran

Je suis sur Mountain Lion et la réponse acceptée de Dave Isaacs a fonctionné pour moi. Je devais aussi faire

Sudo ln -s llvm-g++-4.2 g++-4.2
1
nroose

Plutôt que de mettre à jour RVM ( https://stackoverflow.com/a/10430742/2807795 ), comme ci-dessus, c'est la réinstallation de Ruby 2.0.0-p247 qui a fait l'affaire, après avoir suivi toutes les étapes dessus sans succès.

rvm get head
rvm install 2.0.0
1
Rick Colosimo

Si la sortie comprend:

/Users/disaacs/.rvm/rubies/Ruby-1.9.3-p125/lib/Ruby/1.9.1/mkmf.rb:381:in `try_do': \
    The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.

alors il y a vraiment quelque chose qui cloche dans votre environnement de compilation. Surtout lorsque l'échec est le tout premier test exécuté par extconf.rb.

Si vous avez installé XCode, alors peut-être que vous n'avez pas installé le composant Outils de ligne de commande de XCode? Ils étaient récemment séparés de XCode proprement dit , vous devez donc les installer séparément.

0
Michael Granger