gem install pg ne fonctionne pas sur OSX Lion

il y a des variantes de cette question rebondissant autour de ainsi, mais aucun d'eux semblent avoir une réponse qui résout mon problème.

Je cours OSX Lion (10.7.3). Le dernier XCode est installé.

J'ai installé Postgres en utilisant les Postgres.package de l'application de postgresapp.com.

mais quand j'essaie 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

la sortie de la commande /Applications/Postgres.app/Contents/MacOS/bin/pg_config est:

$ /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 corrects, sauf pour la variable CONFIGURE (qui semble renvoyer à un autre ordinateur --je n'ai pas d'utilisateur nommé mattt).

le contenu du mkmf.fichier journal sont

"/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 regardé l'extconf.fichier rb, et après quelques déboguages j'ai trouvé que c'est un appel à

find_header ('libpq-fe.h')

c'est un échec. Non pas parce que libpq-fe.h n'est pas là, mais parce que la méthode find_header elle-même est défaillante. J'ai essayé d'exécuter 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.

EDIT:

a découvert que mon ordinateur devait être encore plus bourré que je le pensais. Je faisais l'installation de bundle pour un autre projet, et j'ai eu un échec très similaire en installant le Gem sqlite3.

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

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

30
demandé sur Dave Isaacs 2012-04-27 08:42:14

13 réponses

j'ai enfin trouvé la cause du problème! Bien que je ne sache toujours pas comment ce problème est apparu.

regardez le contenu du mkmf.log fichier qui est créé lorsque ma commande install échoue (voir mon post original). Il enregistre une tentative d'exécuter 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 y a un gcc , qui est symboliquement lié à llvm-gcc-4.2 . Ma solution était de créer une autre lien symbolique

sudo ln -s llvm-gcc-4.2 gcc-4.2 

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

j'ai trouvé la solution à ce problème sur le blog Frozen Canuck dans le post erreur D'installation Ruby Gem avec Extension C . Il suppose que le problème peut être causé par des versions contradictoires de XCode. quelle que soit la cause, mes remerciements éternels!

62
répondu Dave Isaacs 2012-05-05 03:34:15

on OS X Mavericks

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

works.

19
répondu guapolo 2013-10-24 05:00:53

j'ai eu un problème similaire. Suite à une réponse de bobfet1 pour un problème similaire j'ai pu obtenir le gem installé par:

sudo env ARCHFLAGS="-arch x86_64" gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
15
répondu spirossi 2017-05-23 12:24:14

merci à ce type: http://www.computersnyou.com/2025 /

sur Mavericks en utilisant: xcode-select --install (en supposant que vous avez installé Xcode de l'app store) fonctionne.

13
répondu pjammer 2013-11-04 19:59:44

installer xcode à partir de l'app store n'est pas suffisant. Vous aurez également besoin des outils en ligne de commande de xcode. https://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_3.html

après l'installation xcode à partir de l'app store, ouvrir xcode. Goto Xcode->Ouvrir Le Développeur De L'Outil->Plus D'Outils De Développement Télécharger et installer les derniers outils en ligne de commande.

ouvrir une fenêtre de terminal et exécuter: sudo gem install pg

7
répondu Brandon Kearby 2012-07-03 16:00:46

problème similaire sur Mavericks 10.9 -- mais il a été causé par le fait de ne pas avoir accepté le contrat de licence Xcode. Blech.

Exécuter sudo xcodebuild et conviennent à la poubelle. Le tout fonctionne comme prévu.

6
répondu trisweb 2013-11-03 19:19:56

j'ai également rencontré cette question, pour moi la réponse était la mise à jour RVM de toutes choses.

rvm get head
rvm install 1.9.2
2
répondu philoye 2012-05-03 11:48:44

moi aussi, je suis sur Mountain Lion, à part le "sudo ln-s / usr / bin / {llvm -,} gcc-4.2" suggéré par @grilix, je devais faire:

sudo ln -s /usr/bin/{llvm-,}g++-4.2
2
répondu izilotti 2012-10-05 15:10:33

après une mise à jour de Mavericks...

réinstallez votre version ruby.

rvm uninstall 1.9.2-p320

puis

rvm install 1.9.2-p320

ou n'importe quelle version de ruby que vous avez.

2
répondu Kevin Monk 2014-06-12 00:15:27

je suis sur Mountain Lion, et la réponse acceptée de Dave Isaacs a fonctionné pour moi. J'ai également eu à faire

sudo ln -s llvm-g++-4.2 g++-4.2
1
répondu nroose 2012-07-27 16:58:51

plutôt que de mettre à jour le RVM lui-même ( 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 essayé toutes les autres étapes ci-dessus sans succès.

rvm get head
rvm install 2.0.0
1
répondu Rick Colosimo 2017-05-23 12:24:14
$ gem install pg

en cas d'échec:

$ sudo gem install pg

puis, si cela a échoué:

$ sudo find / -name “pg_config”

après avoir trouvé l'emplacement de pg_config , Lancez ceci pour l'installer:

$ 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 vers où vous avez trouvé pg_config .

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

<codegem list</code showing the right things

pour en savoir plus, lisez mon guide .

1
répondu Naveen Segaran 2016-03-18 20:25:08

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 ne va pas avec votre environnement de compilation. Surtout quand la défaillance est le tout premier test que extconf.rb exécute.

si vous avez Xcode installé, alors peut-être que vous n'avez pas le composant outils en ligne de commande de XCode installé? Ils étaient récemment séparé de XCode propre , donc vous devez les installer séparément.

0
répondu Michael Granger 2012-04-28 00:00:47