"Gem install therubyracer -v '0.10.2'" auf nicht installierten osx mavericks

90

Beim Versuch, therubyracer mit "gem install therubyracer -v '0.10.2'" auf Außenseitern zu installieren, wird folgende Fehlermeldung angezeigt:

/Users/dennischen/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb
checking for main() in -lobjc... yes
creating Makefile

make
compiling rr.cpp
clang: warning: argument unused during compilation: '-rdynamic'
rr.cpp:48:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
1 warning generated.
compiling v8.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_array.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_callbacks.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_context.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_date.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_debug.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_exception.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_exception.cpp:10:16: warning: unused variable 'stack' [-Wunused-variable]
  static void* stack[20];
               ^
1 warning generated.
compiling v8_external.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_external.cpp:10:9: warning: unused variable 'references' [-Wunused-variable]
  VALUE references;
        ^
1 warning generated.
compiling v8_function.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_handle.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_locker.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_locker.cpp:45:5: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
v8_locker.cpp:85:5: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
2 warnings generated.
compiling v8_message.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_object.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_object.cpp:77:19: warning: unused variable 'proto' [-Wunused-variable]
    Handle<Value> proto(rr_rb2v8(prototype));
                  ^
1 warning generated.
compiling v8_script.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_string.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_template.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_try_catch.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_v8.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_value.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_value.cpp:100:9: warning: unused function 'ToInt32' [-Wunused-function]
  VALUE ToInt32(VALUE self) {
        ^
1 warning generated.
compiling v8_weakref.cpp
clang: warning: argument unused during compilation: '-rdynamic'
linking shared-object v8.bundle
clang: error: no such file or directory: '/Users/dennischen/.rvm/gems/ruby-1.9.3-p194@panini/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a'
make: *** [v8.bundle] Error 1

Kann mir jemand helfen, herauszufinden, wie ich dieses Juwel zum Laufen bringen kann? Ich habe die Befehlszeilentools installiert.

user2711889
quelle
Haben Sie homebrew? Versuchen Sie, v8 mit zu installieren, brew install v8bevor Sie gem
Ivan Shamatov
Ich glaube, die Brew Install Version 8 ist ein separates Problem. Weitere Informationen zu Version 8 mit Gebräu finden Sie unter stackoverflow.com/questions/11598655/therubyracer-install-error .
Ash Blue

Antworten:

242

Wenn Sie sich für eine neuere Version entscheiden therubyracer Edelsteinversion dieses Problem nicht mehr auf

Andernfalls:

brew tap homebrew/dupes # Thanks Tom
brew install apple-gcc42

export CC=/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2
export CXX=/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2
export CPP=/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2

brew uninstall v8

gem uninstall libv8

gem install therubyracer -v '0.10.2' # specify version
Julian Popov
quelle
11
Dieser Ansatz scheint besser zu sein als das Ändern von Symlinks
Nilesh
3
brew tap homebrew/dupesbehebt "Fehler: Keine verfügbare Formel für apple-gcc42"
TomFuertes
1
Dies hat das Problem ENDLICH für mich behoben - danke! Ich habe die Symlink-Lösung von M. Scott Ford unten ausprobiert und sie schien zu funktionieren, habe aber einen Fehler ausgegeben, als ich tatsächlich versucht habe, etwas zu tun (Rechen, Schienen usw.).
Kyle Fox
2
Ihr Update auf Therubyracer 0.12.0 hat dieses Problem für mich behoben.
Jackocnr
6
Leider funktioniert keine dieser Lösungen für mich unter OSX 10.9, Ruby 2.1.0 und Therubyracer 0.12.1.
Turboladen
16

Nach einigem Kämpfen habe ich es endlich zum Laufen gebracht ... danke an Simon und Alvaro.

Ich muss jedoch eines hinzufügen: Die Verwendung des Flags --with-system-v8 hat bei mir nicht funktioniert ... Also habe ich mein System v8 mit entfernt

brew uninstall v8

Und der Lauf

gem install libv8

Wenn Sie bereits gem install libv8mit dem System v8-Flag ausgeführt haben, müssen Sie diese Gem-Version deinstallieren (führen Sie sie aus gem uninstall libv8). Das Wichtigste ist, dass Sie das von Brew bereitgestellte nicht verwenden sollten. Es scheint in Mavericks nicht zu funktionieren (es wird gut installiert und der Bundler meldet, dass Ihr Bundle vollständig ist, aber Ihre App schlägt fehl, wenn er versucht, v8 zu verwenden ).

Um die Antwort zusammenzufassen, hat Folgendes für mich funktioniert:

brew install apple-gcc42
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 /usr/bin/gcc
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2 /usr/bin/g++
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2 /usr/bin/cpp

brew uninstall v8
gem install libv8
gem install therubyracer
damianmr
quelle
2
Das hat bei mir funktioniert. Aber ich habe gcc mit / usr / local / bin verknüpft und das Terminal neu gestartet, damit ich es entfernen kann, nachdem ich libv8 installiert habe.
Jamon Holmgren
2
Es ist eine wirklich schlechte Idee, Homebrew-Binärdateien mit dieser bestimmten Version in / usr / bin zu verknüpfen. Der nächste brew update, der kommt und diese Pfade dreht, wird Sie in einem kaputten Zustand zurücklassen.
Herr
10

Ich hatte das gleiche Problem, das funktioniert bei mir:

Therubyracer (0.10.2) & libv8 (3.3.10.4)

Zuerst:

  • brew install apple-gcc42
  • Sie müssen alle Binärdateien der Compiler verknüpfen ( gcc, cpp, g++) zu/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/<compiler>

Danach können Sie Folgendes versuchen:

  • brew install v8
  • gem install libv8 -v '3.3.10.4' -- --with-system-v8
  • gem install therubyracer -v 'therubyracer'oder bundle installin das Verzeichnis des Rails-Projekts.
Alvaro
quelle
apple-gcc42: This formula either does not compile or function as expected on macOS Mein macOS ist 10.12.6
Wylliam Judd
7

Ich hatte gerade das gleiche Problem und eine Lösung besteht derzeit darin, apple-gcc42 anstelle von clang zu verwenden, um beide Edelsteine ​​zu kompilieren:

brew install apple-gcc42

Und dann haben Sie die Wahl zwischen einigen Symlinks in / usr / bin für {gcc, g ++, c ++} Binärdateien:

sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 /usr/bin/gcc
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2 /usr/bin/g++
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2 /usr/bin/cpp

In der Tat sollte g ++ genug sein.

Oder ... Sie können CC / CXX / CPP-Umgebungsvariablen mit Pfaden exportieren, die den von Homebrew erstellten Binärdateien entsprechen. Das ist sicherlich eine sauberere Problemumgehung.

Eine dritte Lösung ist Xcode 4.6.3 herunterladen und im Installations Anwendungen Ordner. Geben Sie dann in das Terminal ein:

sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developer
gem install therubyracer

Sobald der Edelstein installiert wurde, können Sie wieder zu Xcode 5.0 wechseln:

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
Simon
quelle
Wie schalte ich den Compiler auf apple-gcc42 um?
user2711889
@Simon Wenn ich versuche, eine Symlinc-Verbindung zu den Compilern herzustellen, wird die Meldung angezeigt, dass eine Datei vorhanden ist. Ist das die Clang-Datei? Wenn ich die Bundle-Installation ausführe, wird gcc anscheinend nicht verwendet, da der Fehler voller Clang-Referenzen ist.
Isea
Wenn Sie MacPorts verwenden, müssen Sie keinen Symlink erstellen, um auf eine andere GCC-Version zu verweisen. Dafür gibt es einen integrierten Befehl (siehe meine Antwort).
Jshkol
6

Ich habe eine Problemumgehung gefunden, die ohne die Installation von apple-gcc42 funktioniert hat.

Dies funktioniert, wenn die Fehlermeldung wie folgt aussieht:

clang: error: no such file or directory: '/Users/mscottford/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a'

Dann sollten Sie in der Lage sein, Folgendes zu tun:

brew install v8
bundle install 
# after failing create link from brew installed v8 to error location
ln -s /usr/local/Cellar/v8/3.21.17/lib/libv8_base.x64.a /Users/mscottford/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a
bundle install

Quelle: https://github.com/cowboyd/therubyracer/issues/277#issuecomment-27734348

M. Scott Ford
quelle
Riesige +1 für diesen. Das Juwel wurde auf der CLI installiert, aber RubyMine v6 weigerte sich, es zu installieren. Durch Setzen dieses Symlinks wurde das Problem endgültig behoben. Vielen Dank!
Ode
1
Diese 1000%, Prost @ M.ScottFord. Ich benutze rvm und daher war meine ln Aussage folgende:ln -s /usr/local/Cellar/v8/3.21.17/lib/libv8_base.x64.a ~/.rvm/gems/ruby-1.9.3-p327/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a
Dave Foster
3

Wie in vielen Antworten vorgeschlagen, ist es am einfachsten, die nativen Ruby Racer-Erweiterungen mit Apple GCC 4.2 (anstelle der mit Xcode installierten Version) zu kompilieren.

Wenn Sie MacPorts verwenden, sollten Sie sich nicht manuell mit dem Einrichten symbolischer Links für die GCC-Binärdateien befassen müssen. Der port selectBefehl erledigt das für Sie. Wenn Sie MacPorts seit der Installation von Mavericks nicht aktualisiert haben, führen Sie a sudo port selfupdate. Versuchen Sie Folgendes, wenn MacPorts auf dem neuesten Stand ist:

# If you don't have it, install the port for Apple's GCC 4.2
sudo port install apple-gcc42 

    # OR

# If you had apple-gcc42 already (before Mavericks), update it
sudo port upgrade apple-gcc42


# Same result as manual symlinking of GCC in other answers
sudo port select gcc apple-gcc42 && hash -r

# Install therubyracer, will install libv8 gem dependency
#  *note* if you have any existing versions of these gems, remove them
gem install therubyracer

# Restore GCC to system default (optional)
sudo port select gcc none && hash -r

Im Allgemeinen sudo port select gcc [version]funktioniert dieses Verfahren ( ) immer dann, wenn Sie eine bestimmte GCC-Version anstelle der von Xcode installierten verwenden möchten (Apple LLVM v5 für 10.9 Mavericks / Xcode 5).

jshkol
quelle
1
Arbeitete für mich an Außenseitern.
Evo_x
3

Ich schaffe es, therubyracer 0.12 und libv8 3.16.14.3 auf ruby ​​2.0.0p353 und os x 10.9 zu installieren

libv8 benötigt gcc42

brew install v8
brew install apple-gcc42
sudo ln -sf /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 /usr/bin/gcc
sudo ln -sf /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2 /usr/bin/g++
sudo ln -sf /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2 /usr/bin/cpp
gem install libv8

Therubyracer benötigt später gcc

brew install gcc49
sudo ln -sf /usr/local/Cellar/gcc49/4.9-20131110/bin/gcc-4.9 /usr/bin/gcc
sudo ln -sf /usr/local/Cellar/gcc49/4.9-20131110/bin/g++-4.9 /usr/bin/g++
sudo ln -sf /usr/local/Cellar/gcc49/4.9-20131110/bin/cpp-4.9 /usr/bin/cpp

Gemfile

gem 'therubyracer', :require => 'v8', :platforms => :ruby

verwenden bundlestattgem install therubyracer

Eugene
quelle
Vielen Dank! Dies brachte mich bundle installnach Tagen des Versuchs und Irrtums endlich vorbei . Das einzige, was ich anders gemacht habe, war, alle Entwicklertools zu deinstallieren, die von installiert wurden, brewbis gcc --versiongemeldet wurde, dass es sich um die Apple LLVM-Version handelt und mit Xcode konfiguriert wurde. Dann habe ich das vorhandene /usr/bin/gcc(et al.) Vor dem Symlinking des Apple-gcc42 entfernt libs, anstatt gcc49 zu installieren (als ich das letzte Mal versuchte, es zu übernehmen, um es zu konfigurieren), habe ich einfach die ursprünglichen gcc-, g ++ - und cpp-libs zurückkopiert. Angesichts der Tatsache, dass ich 3 Dutzend verschiedene Möglichkeiten ausprobiert habe, um die für mich funktionierende zu finden, YMMV
Chris Bloom
3

Dies sollte eine ausfallsichere und saubere Methode (keine Symlinks) sein, um den Theryracer für alle zu installieren, die Probleme haben.

Entnommen aus: gem install therubyracer -v 0.11.4 schlägt unter OS X 10.10 fehl

Installieren Sie Xcode (falls Sie noch keine dieser Versionen haben) 6.1.1, 6.2-Beta oder 6.3-Beta und (diese wird benötigt) 4.6.3

gem uninstall libv8 wenn Sie es noch nicht getan haben

Wechseln Sie zu Xcode 4.6.3

sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developer

gem install libv8 -v '3.11.8.17' Oder welche Version auch immer an Ihre Version von therubyracer gebunden ist

Wechseln Sie zu Xcode 6.1.1, 6.2-Beta oder 6.3-Beta (oder wenn Sie Ihre aktuelle Installation von Xcode ausprobieren möchten, passen Sie diese Zeile an, ich habe alle 3 dieser Arbeiten bestätigt)

sudo xcode-select --switch /Applications/Xcode6.1.1.app/Contents/Developer

gem install therubyracer -v '0.11.4' oder die Version, die Sie installieren möchten.

Travis
quelle
1
Danke @ th01 das hat bei mir funktioniert ... Ich habe 3 Stunden lang alles versucht, was ich finden konnte ... in meinem Fall war es das Juwel von libv8. Xcode4.6.3 heruntergeladen und mit dieser Version ausgeführt und erfolgreich installiert. Hier ist ein Link mit einem kurzen Tutorial zum Installieren mehrerer Xcode-Versionen: blogs.oracle.com/mobile/entry/how_to_install_multiple_xcodes
miligraf
Als ich Xcode 4.6.3 herunterladen und dann laufen sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developerund führen Sie dann gem install libv8 -v '3.3.10.4'erhalte ich: unable to locate xcodebuild, please make sure the path to the Xcode folder is set correctly! Was mache ich falsch gemacht?
Wylliam Judd
1

Ich hatte einen fast identischen Fehler beim Versuch, therubyracer 0.12.0 zu installieren, damit es mit libv8 funktioniert. Das hat bei mir funktioniert:

$ brew upgrade gcc

$ gem uninstall therubyracer

$ gem uninstall libv8

$ gem install therubyracer -v '0.12.0'
Fetching: therubyracer-0.12.0.gem (100%)
Building native extensions.  This could take a while...
Successfully installed therubyracer-0.12.0
1 gem installed

$ gem install libv8 -v '3.16.14.3' -- --with-system-v8
Fetching: libv8-3.16.14.3.gem (100%)
Building native extensions with: '--with-system-v8'
This could take a while...
Successfully installed libv8-3.16.14.3
1 gem installed
Javid Jamae
quelle
0

Ich hatte das gleiche Problem, als ich ein Upgrade von OSX Mountain Lion auf OSX Mavericks durchführte.

Ein Upgrade von Ruby-1.8.7-p354 auf Ruby-1.8.7-375 hat mir geholfen.

Versuchen Sie vielleicht, ein Upgrade von Ruby 1.9.3-p194 auf rc1 durchzuführen (1.9.3 liegt jetzt über p484).

Angenommen, Sie verwenden rbenv:

rbenv install 1.9.3-rc1
rbenv rehash
rbenv global 1.9.3-rc1
bundle install
Nelsonenzo
quelle
0

Ich hatte dieses Problem nach dem Upgrade von Mavericks auf Yosemite. Das Problem war, dass ich meine Ruby-Version mit der alten Version von OSX kompiliert habe.

Wenn ich renne

ruby -rubygems -e 'puts Gem::Platform.new(RUBY_PLATFORM)'

Ich würde x86_64-darwin-13statt x86_64-darwin-14für Yosemite bekommen.

So installieren Sie Ruby I.

  1. Vollständig entfernte alte Version: rvm remove ruby-2.1.1
  2. Von der Quelle neu installiert (die --disable-binary verwendet keine vorkompilierten Binärdateien und erzwingt einen Build): rvm reinstall --disable-binary 2.1

Dann konnte ich bundle installfehlerfrei laufen , nachdem ich alle oben genannten Lösungen ausprobiert hatte.

Moemars
quelle
-2

Was ich getan habe, war auf Osx Mavericks:

git clone git@github.com:cowboyd/therubyracer.git

Dann:

gem build therubyracer.gemspec
gem install therubyracer-0.12.1.gem

Diese Prozedur hat eine Binärversion von libv8 heruntergeladen und installiert.

Darmou
quelle