therubyracer - Gem :: Ext :: BuildError: ERROR: Fehler beim Erstellen der nativen Gem-Erweiterung


81

Ich versuche, die folgenden Gem-Versionen auf Mavericks zu installieren

  • libv8 (3.16.14.3)
  • Therubyracer (0.12.1)

Offensichtlich hängt der Edelsteinraub von libv8 ab.

1) Installieren von libv8

Was ist libv8? Meine Recherchen scheinen darauf hinzudeuten, dass es sich um eine Art Javascript-Bibliothek handelt, die von Google Chrome verwendet wird.

Ich hatte Probleme bei der Installation, aber dieser großartige Beitrag enthielt sowohl meinen Fehler als auch eine gut erläuterte Antwort zur Umgehung.

Also installierte ich libv8mit

gem install libv8 -- --with-system-v8

Ich verstehe, dass dies das Gem installiert, aber meine lokale Systeminstallation der v8-Bibliothek anstelle von ... der Version verwendet, die mit dem Gem geliefert wird? In jedem Fall war es erfolgreich.

2) Installieren des Therubyracers

Im nächsten Schritt hatte ich Probleme, Gem zu installieren therubyracer. Ich bin mir nicht ganz sicher, was dieses Juwel macht, nur dass es eine Abhängigkeit von einem Rails-Projekt ist, das ich versuche bundle install.

Es gibt mir den folgenden Fehler:

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /Users/jeeves.butler/.rvm/rubies/ruby-1.9.2-p290/bin/ruby extconf.rb 
checking for main() in -lpthread... yes
checking for main() in -lobjc... yes
checking for v8.h... no
*** 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/jeeves.butler/.rvm/rubies/ruby-1.9.2-p290/bin/ruby
    --with-pthreadlib
    --without-pthreadlib
    --with-objclib
    --without-objclib
    --enable-debug
    --disable-debug
    --with-v8-dir
    --without-v8-dir
    --with-v8-include
    --without-v8-include=${v8-dir}/include
    --with-v8-lib
    --without-v8-lib=${v8-dir}/lib
/Users/jeeves.butler/.rvm/gems/ruby-1.9.2-p290/gems/libv8-3.16.14.3/ext/libv8/location.rb:50:in 
'configure': You have chosen to use the version of V8 found 
on your system (Libv8::Location::System::NotFoundError)
and *not* the one that is bundled with the libv8 rubygem. However,
it could not be located. please make sure you have a version of
v8 that is compatible with 3.16.14.3 installed. You may
need to special --with-v8-dir options if it is in a non-standard
location

thanks,
The Mgmt

    from /Users/jeeves.butler/.rvm/gems/ruby-1.9.2-p290/gems/libv8-3.16.14.3/lib/libv8.rb:7:in `configure_makefile'
    from extconf.rb:32:in `<main>'

extconf failed, exit code 1

Gem files will remain installed in /Users/jeeves.butler/.rvm/gems/ruby-1.9.2-p290/gems/therubyracer-0.12.1 for inspection.
Results logged to /Users/jeeves.butler/.rvm/gems/ruby-1.9.2-p290/extensions/x86_64-darwin-13/1.9.1/therubyracer-0.12.1/gem_make.out

Soweit ich das beurteilen kann, habe ich mich für die Installation libv8mit meiner lokalen V8-Bibliothek anstelle der mitgelieferten entschieden libv8, aber jetzt konnte die lokale Installation nicht gefunden werden.

  • Wie überprüfe ich, ob V8 tatsächlich installiert ist und wie finde ich es?
  • Ich habe einige der angegebenen Flags ausprobiert. Keines von ihnen schien das Juwel auf das richtige Installationsverzeichnis zu verweisen
  • Dies mag ein separates Thema sein, aber was ist das extconf.rb? Ich habe es an einigen Stellen gesehen. Und was versucht es gcckonkret mit dem Compiler zu tun ?

Vielen Dank!!

BEARBEITEN:

  1. Ich habe diese Lösung ausprobiert, libv8 zu deinstallieren und über neu zu installieren brew install. Es wurde auch in einigen ähnlichen Fragen erwähnt. Kein Glück.

  2. Ich habe auch versucht , die CC, CXXund CPPUmgebungsvariablen , wie hier , obwohl ich glaube nicht , dass irgendeine Wirkung hat , wie es bereits meinen picking up - gcc v4.6Compiler.


das das vielleicht?
dax

2
<seufz> Ich hatte immer Probleme, Therubyracer auf einem Mac zu installieren = (
Maerics

Antworten:


166

Diese Schritte haben bei mir funktioniert.

Betriebssystem: Maverick Ruby: 2.1.1

gem uninstall libv8
gem install therubyracer -v '0.11.3'
gem install libv8 -v '3.11.8.13' -- --with-system-v8

Akzeptieren Sie diese Antwort mit einer Änderung. Ich habe die Schritte 3 und 2 umgeschaltet, damit es funktioniert - installiere libv8 und dann theruby racer. Vielen Dank!
user2490003

Danke, das hat wie ein Zauber gewirkt! Ich muss müde werden, aber es wäre hilfreich, wenn Ihre Anweisungen scharfe anstelle Ihrer Versionsnummern hätten. Ich musste verschiedene Versionen installieren, aber ich kopiere einfach Ihre Notizen.
Taylored Websites

Beachten Sie, dass die libv8-Version von entscheidender Bedeutung ist, da hier erwähnt wird, dass die Veröffentlichung von ungeraden Punkten (die letzten beiden Ziffern in der Version) auch die Binärdatei enthält.
Jimmy Chu

Der Tanz zum Installieren / Deinstallieren / Neuinstallieren hat bei Mojave für mich funktioniert. Ich hasse dieses alte Zeug! : D
leere Wände

73

Für diejenigen, die mit diesem Problem in OS X El Capitan konfrontiert sind , hat diese Lösung aus einem Therubyracer-Problem-Thread letztendlich für mich funktioniert:

brew tap homebrew/versions
brew install v8-315

gem install libv8 -v '3.16.14.13' -- --with-system-v8
gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8-315

bundle install

Ich war auch schon früher gelaufen brew install gcc, bin mir aber nicht sicher, ob dies tatsächlich notwendig war.


1
Ich musste mein Gemfile.lock löschen, bevor es endlich funktionierte. Danke für den Hinweis.
Abuzze

3
+1, aber für zukünftige Leser sollten Sie dies gem install libv8 -v 'A.B.C.D'entsprechend tun. Es ist der 3.16.14.15 zum Zeitpunkt dieses Schreibens.
Dave Land

1
+1, Falls Sie bestimmte Version von therubyracer Gebrauch installieren:gem install therubyracer -v 'x.x.x' -- --with-v8-dir=/usr/local/opt/v8-315
avital

1
Sieht sehr nach Jottrs Antwort aus. Vielleicht werfen Sie ihm einen Ruf.
Omikes

4
Für mich war das v8-Verzeichnis: /usr/local/opt/v8@3.15
SamuelLJohnson

26

Versuchen Sie zuerst, libv8 gem zu deinstallieren, installieren Sie dann rubyracer und dann libv8

gem uninstall libv8
gem install therubyracer
gem install libv8 -- --with-system-v8

1
Kein Glück :( Die folgenden Zeilen des Fehlers schienen interessant zu sein: g ++ - 4.6: Fehler: x86_64: Keine solche Datei oder kein solches Verzeichnis g ++ - 4.6: Fehler: nicht erkannte Option '-arch'
user2490003

1
Ich habe , dass die Installation gefunden , libv8bevor therubyracerbesser funktioniert.
Chris Peters

23

Die auf github veröffentlichte Lösung von Tertom hat es für mich gelöst, nachdem ich alle anderen Lösungen ausprobiert hatte, die zum jeweiligen Github-Problem und hier vorgeschlagen wurden.
Ich hatte genau die gleiche Systemkonfiguration.
Dies ist auf el capitan, also keine genaue Antwort auf die Frage, aber die Leute finden diese Informationen möglicherweise hilfreich.

Ich zitiere es hier zur besseren Sichtbarkeit:

Das gleiche Problem gelöst

  • MacOS 10.11.2
  • Rubin 1.9.3
  • libv8 3.16.14.13
  • Therubyracer 0.12.2

- -

brew tap homebrew/versions  
brew install v8-315  
brew link --force v8-315  
bundle install  
brew unlink v8-315

Wenn Sie libv8 auch nicht installieren können,

gem install libv8 --with-system-v8

oder

bundle config build.libv8 --with-system-v8

1
Das hat bei mir funktioniert. Ich musste die Version von libv8 gem angeben, die Rubyracer voraussichtlich installieren wird.
Paul Sturgess

1
Ja, ich glaube, das bundle config build.libv8 --with-system-v8war der Schlüssel für mich. Vielen Dank!
Natebeaty

Dies war das einzige, was für mich funktionierte (und es Ende 2019 auf Catalina versuchte)
Sam Johnson,

Sehr hilfreich, obwohl Homebrew / Versionen veraltet waren. Mein Problem war, dass mein aktueller Link mit '/ usr / local / bin / d8' verknüpft war. Das zu lösen und zu rennen brew link --force v8-315hat bei mir funktioniert. 2/2020 - MacOS 10.15.3. - Ruby Version 1.9.3 - Bundler 1.16.4 - libv8 Version 13.16.14.19
Thomas

11

Für alle, die MacOS 10.15 verwenden, hat sich Brew geändert, sodass Sie diese Befehle ausführen müssen.

brew install v8@3.15
gem install libv8 -v 'YOUR_VERSION' -- --with-system-v8
gem install therubyracer -v 'YOUR_VERSION' -- --with-v8-dir=/usr/local/opt/v8@3.15
bundle install

6

Die obigen Antworten haben bei mir nicht funktioniert; Meine Bundler-Konfiguration wurde disable-shared-gemsaktiviert, was zusätzliche Probleme verursacht.

Ich verwende Yosemite 10.10.1, Rails 3.2.x und Ruby 1.9.3p550.

Das folgende Snippet in meinem bin/setuphat das Problem für mich behoben.

if ! bundle show therubyracer; then
    bundle config build.libv8 --with-system-v8
    gem install --install-dir vendor/bundle libv8 -v 3.16.14.7
    gem install libv8 -v 3.16.14.7
    gem install --install-dir vendor/bundle therubyracer 
fi

4

Ich habe eine Problemumgehung für das oben genannte Problem gefunden.

Dies ist eher eine Kompatibilität zwischen libv8 und therubyracer.

gem install libv8 -v '3.3.10.4' -- --with-system-v8

gem install therubyracer -v '0.10.2'

Dies sollte gut funktionieren, da beide Versionen mit mir kompatibel sind. Anfangs habe ich versucht, die Version 0.12.0 für Therubyracer zu installieren, und war mit dem Problem konfrontiert. Nachdem ich auf Version 0.10.2 umgestellt hatte, funktionierte alles einwandfrei.

Mein aktuelles Betriebssystem: Mavericks


3

Ich habe dieses Problem für MacOS Mojave 10.14.2und konnte dieses Problem beheben, als ich herausfand, wo das Paket v8-315installiert war und wie der Ordnername lautete. In meinem Fall war es hier /usr/local/opt/v8@3.15.

Um dies zu beheben, habe ich als nächstes ausgeführt:

brew install v8-315
gem install libv8 -v '3.16.14.15' -- --with-system-v
gem install therubyracer -v '0.12.2' -- --with-system-v8 --with-v8-dir=/usr/local/opt/v8@3.15
bundle install

1

Nachdem ich mir fast zwei Tage lang den Kopf gebrochen hatte, funktionierte das für mich.

rvm install 2.2.2
gem install rails
bundle install

1

Ich konnte therubyracer aufgrund der libv8-Abhängigkeit trotz der Installation von x64 (64-Bit-Variante) von libv8 nicht dazu bringen, auf macOS Catalina 10.15 aufzubauen.

Die Lösung für mich war, von therubyracer zu mini_racer zu wechseln, das Juwel mini_racer zu installieren (ohne lokal bauen zu müssen) und, hey presto! Ich könnte weitermachen

Versuch es!


Außer wenn für Ihr Projekt WENIGER Dateien in CSS kompiliert werden müssen: /
Martin Carel

1

In meinem Fall

MacOS: Catalina , Ruby: 2.3.3 , Verwenden von rbenv (nicht RVM), I Erforderliche Therubyracer-Version: 0.12.3 (spielt keine Rolle)

Ich habe die ganze Lösung ausprobiert, aber was für mich funktioniert hat, liebe pls, kopiere nicht blind die Einfügelösung (bcz habe ich in meinem Fall gemacht), lese zuerst und ändere dann die Versionen in den folgenden Befehlen, wenn du welche brauchst. Die meisten Befehle sind in den meisten vorhandenen Antworten üblich, aber was für mich funktioniert hat, gem install therubyracer -- --with-v8-dir=$(brew --prefix v8-315)anstatt gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8-315Danke an Junji Zhi für seinen Kommentar in dieser Antwort

1. brew install gcc
2. brew tap homebrew/versions   (If it wont work then below 2 steps, for latest MacOS version)
2.a. brew tap brewsci/bio
2.b. brew tap brewsci/science
3. brew install v8-315     (uninstall if v8 installed previously without '-315')
4. gem install libv8 -v '3.16.14.19' -- --with-system-v8   (Be careful with the libv8 version mentioned in this command, replace version number with one required)
5.a. gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8-315    (If it does not work then try below one, In my case below command worked)
5.b. gem install therubyracer -- --with-v8-dir=$(brew --prefix v8-315)

Fertig, dann fahren Sie mit Ihrem fort bundle install

Hinweis : Überprüfen Sie während der Installation von therubyracer durch gem , welche Version von libv8 installiert wird. Wenn sie sich von der in Schritt 4 genannten unterscheidet , wird Ihr therubyracer möglicherweise nicht installiert. Führen Sie also nur eine Sache aus und gem uninstall libv8wiederholen Sie Schritt 4 durch Ändern die Version , was Sie in der Konsole sehen können, während Sie therubyracer installieren


1

Das hat bei mir funktioniert:

gem install libv8 -v '3.16.14.17' -- --with-system-v8
brew install v8-315
gem install therubyracer -v '0.12.3' --source 'http://rubygems.org/' -- --with-v8-dir='/usr/local/opt/v8@3.15'

Überprüfen Sie für den letzten Befehl die Ausgabe von brew --prefix v8-315in meinem Fall war es /usr/local/opt/v8@3.15.


-2

Mir ist aufgefallen, dass wir auf ein Problem stoßen:

Gem::Ext::BuildError: ERROR: Failed to build gem native extension

Sie sollten dann build-essential installieren

sudo apt install build-essential

Es funktioniert bei den Installationsproblemen von mini_race.


-3

Ich habe gerade ein Bundle-Update ausgeführt und es hat bei mir funktioniert.

Obs.: Mit Ruby 2.3.0

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.