2012-04-27 13 views
30

Es gibt Variationen dieser Frage hüpfen um SO, aber keiner von ihnen scheint eine Antwort zu haben, die mein Problem löst.gem installieren pg funktioniert nicht auf OSX Lion

Ich verwende OSX Lion (10.7.3). Der neueste XCode ist installiert.

Ich habe Postgres mit dem Postgres.app-Paket von postgresapp.com installiert.

Aber wenn ich versuche, das pg Juwel zu installieren, erhalte ich einen Fehler:

$ 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 

Der Ausgang des /Applications/Postgres.app/Contents/MacOS/bin/pg_config Befehl lautet:

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

Alle, die Einstellung korrekt zu sein scheinen, mit Ausnahme für die Variable CONFIGURE (die sich auf einen anderen Computer zu beziehen scheint - ich habe keinen Benutzer namens mattt).

Der Inhalt der Datei mkmf.log sind

"/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 */ 

Irgendwelche Vorschläge geschätzt würde.

Ich habe an der extconf.rb Datei sieht, und nach einigen Debuggen Ich habe festgestellt, dass es einen Aufruf an

find_header ('libpq-fe.h') 

ist, die fehlschlägt. Nicht, weil libpq-fe.h nicht da ist, sondern weil die find_header-Methode selbst fehlschlägt. Ich habe versucht, find_header mit irb läuft, und bekam den gleichen Fehler:

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

meinem Computer mehr Fand heraus, muss auch borked als ich dachte. Ich habe Bundle-Installation für ein anderes Projekt gemacht, und ich habe einen sehr ähnlichen Fehler bei der Installation des sqlite3-Edelsteins.

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

Ich hatte nie Probleme mit dem sqlite3 Juwel in der Vergangenheit.

+0

http://stackoverflow.com/questions/8548809/pg-gem-install-on-mac-os-lion-with-rvm – mask8

+1

Die Lösung für das Problem in diesem Link besteht darin, den neuesten XCode zu installieren. Ich habe bereits den neuesten XCode installiert. –

+0

Haben Sie versucht, pq mit Homebrew zu installieren? Es lohnt sich auch zu testen, ob die Pakete 'libpq' oder' libpq-dev' verfügbar sind. – tiredpixel

Antwort

62

Ich habe endlich die Ursache des Problems gefunden!Obwohl ich immer noch unsicher bin, wie dieses Problem zustande kam.

Sehen Sie sich den Inhalt der Datei mkmf.log an, die erstellt wird, wenn mein Installationsbefehl fehlschlägt (siehe meinen ursprünglichen Beitrag). Es protokolliert einen Versuch, den folgenden Befehl

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

Es gibt keine /usr/bin/gcc-4.2 auf meinem System zu laufen. Es gibt eine gcc, die symbolisch mit llvm-gcc-4.2 verknüpft ist. Meine Lösung einen weiteren symbolischen Link

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

Nachdem Sie diesen Link, mein gem install pg Befehl ohne Probleme gearbeitet zu schaffen.

Ich fand die Lösung für dieses Problem auf dem Frozen Canuck Blog in der Post Error Installing Ruby Gem with C Extension. Er spekuliert, dass das Problem durch widersprüchliche Versionen von XCode verursacht werden kann. Was auch immer der Grund, mein ewiger Dank!

+5

Fixed mit "sudo ln -s /usr/bin/{llvm-,}gcc-4.2". Vielen Dank! – grilix

+0

Ich hatte keine llvm-gcc-4.2 Run "Brauen installieren Apple-gcc42", um /usr/bin/gcc-4.2 (10.9.1) – Maragues

0

Wenn die Ausgabe beinhaltet:

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

dann gibt es wirklich etwas nicht stimmt mit Ihrer Kompilierungsumgebung. Besonders wenn der Fehler der allererste Test ist, der extconf.rb läuft.

Wenn Sie XCode installiert haben, dann haben Sie vielleicht nicht die Befehlszeilentools-Komponente von XCode installiert? Sie waren recently split out from XCode proper, also müssen Sie sie separat installieren.

+0

Ich hatte ursprünglich die Befehlszeilenprogramme nicht installiert. Aber sie zu installieren, machte keinen Unterschied. Derselbe Fehler tritt immer noch auf. –

15

Ich hatte ein ähnliches Problem. Nach einer Antwort von bobfet1 für ein similar issue konnte ich das Juwel von installiert bekommen:

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

Ich habe das versucht. Machte keinen Unterschied. Ich habe gerade einige neue Dinge herausgefunden und meinen ursprünglichen Beitrag aktualisiert. –

+0

Was ist der Zweck des einsamen '-' nach 'pg'? Es scheint ohne sie nicht zu funktionieren, aber ich weiß nicht wofür sie sind. – jurassic

+0

@jurassic Von 'gem help install':" Möglicherweise müssen Sie den Pfad zu den Headern und Bibliotheken der Bibliothek angeben, um [eine Erweiterung zu erstellen]. Sie können dazu - zwischen RubyGems 'Optionen und dem Build der Erweiterung hinzufügen Optionen". Im Allgemeinen bedeutet "-", dass folgende Argumente keine Optionen sind. Z.B. 'rm - -r 'entfernt eine Datei mit dem Namen' -r'. – uasi

2

ich für mich auch in diese Ausgabe lief, wurde die Antwort RVM alle Dinge zu aktualisieren.

rvm get head 
rvm install 1.9.2 
+0

Würde dies nicht meine Ruby-Version auf 1.9.2 herunterstufen? Ich habe versucht, auf das neueste RVM upzugraden, aber das machte keinen Unterschied. –

7

Die Installation von xcode aus dem App Store ist nicht genug. Sie werden auch die Befehlszeilentools von xcode benötigen. https://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_3.html

Öffnen Sie nach der Installation von xcode aus dem App Store xcode. Gehe zu Xcode-> Open Developer Tool-> Weitere Developer Tools Downloaden und installieren Sie die neuesten Befehlszeilenprogramme.

ein Terminal-Fenster öffnen und ausführen: sudo gem pg installieren

+0

zu bekommen Dies ist die richtige Antwort. –

1

Ich bin auf Mountain Lion und die akzeptierte Antwort von Dave Isaacs für mich gearbeitet. Ich hatte auch

sudo ln -s llvm-g++-4.2 g++-4.2 
+3

Ich brauchte das nicht unter OS X 10.8.2. 'sudo ln -s/usr/bin/{llvm -,} gcc-4.2' hat funktioniert. –

2

Ich bin auch auf Mountain Lion, neben dem „sudo ln -s /usr/bin/{llvm-,}gcc-4.2“ von @grilix vorgeschlagen zu tun, ich tun musste, :

sudo ln -s /usr/bin/{llvm-,}g++-4.2 
1

Anstatt RVM Aktualisierung selbst (https://stackoverflow.com/a/10430742/2807795), wie oben, es war die Neu-Installation von Ruby 2.0.0-S. 247, die den Trick tat, nachdem ohne Erfolg alle anderen oben beschriebenen Schritte versuchen.

rvm get head 
rvm install 2.0.0 
19

Unter OS X Mavericks

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

funktioniert.

6

Ähnliches Problem bei Mavericks 10.9 - aber es wurde dadurch verursacht, dass ich der Xcode-Lizenzvereinbarung nicht zugestimmt habe. Blech.

Führen Sie sudo xcodebuild und stimmen Sie dem Müll zu. Das alles funktioniert wie erwartet.

13

Dank dieser Kerl: http://www.computersnyou.com/2025/

Auf Mavericks mit: xcode-select --install (vorausgesetzt, Sie Xcode aus dem App Store installiert haben) funktioniert.

+0

Ich bin nicht sicher, warum dies nicht als die Antwort markiert wurde, aber es trifft absolut den Nagel auf den Kopf unter Berücksichtigung der ersten Frage. Danke @pjammer –

2

Nach einem Maverick Upgrade ...

Ihre Ruby-Version wieder ein.

rvm uninstall 1.9.2-p320 

dann

rvm install 1.9.2-p320 

oder was auch immer Version von Ruby Sie haben.

1
$ gem install pg 

Wenn das scheiterte:

$ sudo gem install pg 

Dann wird, wenn das nicht gelang:

$ sudo find/-name “pg_config” 

Nachdem Sie pg_config ‚s Standort zu finden, führen Sie dies schließlich installieren:

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

Natürlich, du ' Ich möchte den Pfad zu dem Ort ändern, an dem Sie pg_config gefunden haben.

Dann überprüfen Sie Ihre installierten Edelsteine ​​mit gem list, und es so etwas wie dieses zeigen sollte:

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

Weitere Informationen finden Sie in my guide finden.