31 votes

gem install pg ne fonctionne pas sur OSX Lion

Il existe des variantes de cette question de rebondir autour, mais aucun d'entre eux semblent avoir une réponse qui résout mon problème.

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

J'ai installé Postgres à l'aide de la Postgres.package de l'application de postgresapp.com.

Mais quand j'essaie d'installer le pg gem, j'obtiens une erreur:

$ 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 l' /Applications/Postgres.app/Contents/MacOS/bin/pg_config commande 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

Toutes les personnes semblent être correct, sauf pour la configuration de la variable (qui semble se référer à un autre ordinateur, je n'ai pas de nom d'utilisateur mattt).

Le contenu de la mkmf.le fichier journal 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 */

Toutes les suggestions seraient appréciées.

J'ai regardé le extconf.rb fichier, et après un peu de débogage, j'ai trouvé que c'est un appel à l'

find_header ('libpq-fe.h')

qui est un échec. Non pas parce que libpq-fe.h n'est pas là, mais parce que l' find_header méthode elle-même est un échec. J'ai essayé de courir find_header à l'aide de la cisr, et a obtenu le même message d'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:

Trouvé mon ordinateur doit être encore plus complètement foireuse que je ne le pensais. Je faisais bundle install pour un autre projet, et j'ai eu une très similaires échec de l'installation du gem sqlite3.

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

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

62voto

Dave Isaacs Points 2782

J'ai enfin trouvé la cause du problème! Si je ne suis toujours pas sûr de savoir comment ce problème est survenu.

Regarde le contenu de la mkmf.fichier journal est créé lors de ma commande d'installation échoue (voir mon premier post). Il enregistre une tentative d'exécuter la commande suivante

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

Il n'y a pas d' /usr/bin/gcc-4.2 sur mon système. Il y a un gcc, ce qui est symboliquement lié à l' llvm-gcc-4.2. Ma solution a été de créer un autre lien symbolique

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

Après avoir fait ce lien, mon gem install pg commande a fonctionné sans aucun problème.

J'ai trouvé la solution à ce problème sur le Congelés Canuck blog dans le post d'Erreur de l'Installation de Ruby Gem avec C Extension. Il suppose que le problème peut être causé par le conflit entre les versions de XCode. quelle que soit la cause, mon éternelle reconnaissance!

19voto

guapolo Points 491

Sur OS X Mavericks

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

travaux.

15voto

spirossi Points 321

J'ai eu un problème similaire. Suite à une réponse de bobfet1 pour un problème similaire, j'ai pu obtenir la gemme installée par:

 sudo env ARCHFLAGS="-arch x86_64" gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
 

13voto

pjammer Points 5042

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

Sur Mavericks, l'utilisation de: xcode-select --install (en supposant que vous avez installé Xcode depuis l'App Store) fonctionne.

7voto

Brandon Kearby Points 69

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

Après l'installation de xcode à partir de l'app store, ouvrez xcode. Goto Xcode->Ouvrir Le Développeur De L'Outil->Plus D'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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X