gem install pg ne fonctionne pas sur mac 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, je reçois 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 /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 à

find_header ('libpq-fe.h')

qui est un échec. Non pas parce que libpq-fe.h n'est pas là, mais parce que le 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é.

  • stackoverflow.com/questions/8548809/...
  • La solution de la question dans ce lien est d'installer le dernier XCode. J'ai déjà le dernier XCode installé.
  • Avez-vous essayé d'installer pq à l'aide de homebrew? Aussi la peine d'essayer de voir si le libpq ou libpq-dev forfaits sont disponibles.
  • J'ai essayé d'installer postgres à l'aide de Homebrew. Je reçois la même erreur lors de l'installation du gem "la vérification de libpq-fe.h... *** extconf.rb a échoué ***" --qu'est-Ce que la libpq-fe.h fichier de toute façon? J'ai regardé dans les fichiers qui ont été installés avec postgres, et il n'y a pas de libpq-fe.h fichier. Il y a un libpq-fs.h fichier.
  • J'ai trouvé libpq-fe.h dans /usr/local/include, mais même lorsque je ajouter ce répertoire à l'aide de --with-pg-comprendre, il ne fait aucune différence.
  • [supprimé] Oups, pensé que c'était une autre question. Vous avez été d'obtenir la même erreur.
  • Si vous créez manuellement le programme de sous-évaluées dans le mkmf.journal, et d'essayer de le compiler en utilisant la ligne juste au-dessus de (/usr/bin/gcc-4.2 [...]), ce qui se passe?
  • Je viens d'ajouter quelques informations supplémentaires au fond de ma question d'origine. Il semble que c'est un appel à find_header, à partir de la mkmf de la bibliothèque, qui est à l'origine du problème.
  • Avez-vous essayé stackoverflow.com/questions/4393189/...
  • Où est le mkmf.fichier journal?
  • le mkmf.fichier journal peut être trouvé sous le joyau du répertoire d'installation. E. g., si à l'aide de RVM, puis cherchez un répertoire comme ~/.rvm/gems/ruby 1.9.3-p125/gems/pg-0.13.2/ext/mkmf.journal. Ou essayez d'exécuter la commande `find . | grep mkmf.le journal de la .rvm répertoire. Qui vous permettra de trouver tous les.

InformationsquelleAutor Dave Isaacs | 2012-04-27