therubyracer - Gem :: Ext :: BuildError: ERROR: Nie udało się zbudować natywnego rozszerzenia gem

82

Próbuję zainstalować następujące wersje klejnotów na Mavericks

  • libv8 (3.16.14.3)
  • therubyracer (0.12.1)

Oczywiście therubyracer gems zależy od libv8.

1) Instalowanie libv8

Co to jest libv8? Moje badania wydają się wskazywać, że jest to jakaś biblioteka javascript używana przez Google Chrome?

Miałem problem z instalacją, ale ten wspaniały post zawierał zarówno mój błąd, jak i dobrze wyjaśnioną odpowiedź, jak go ominąć.

Więc zainstalowałem libv8z

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

Rozumiem, że to instaluje klejnot, ale używa mojej lokalnej instalacji systemu biblioteki v8 zamiast ... wersji, która jest dostarczana z klejnotem? Tak czy inaczej, udało się.

2) Instalacja śruby do rozrusznika

Podczas następnego kroku miałem problem z instalacją therubyracergem. Nie jestem do końca pewien, co robi ten klejnot, tylko, że jest to zależność projektu railsowego, do którego próbuję bundle install.

Daje mi następujący błąd:

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

Z tego, libv8co udało mi się zebrać, zdecydowałem się zainstalować przy użyciu mojej lokalnej biblioteki V8 zamiast tego, co zostało dostarczone libv8, ale teraz nie można zlokalizować lokalnej instalacji.

  • Jak sprawdzić, czy rzeczywiście mam zainstalowaną wersję V8 i jak ją zlokalizować?
  • Wypróbowałem kilka z określonych flag, żadna z nich nie wskazywała klejnotu na właściwy katalog instalacyjny
  • To może być osobny temat, ale co nim jest extconf.rb? Widziałem to w kilku miejscach. A co gcckonkretnie próbuje zrobić z kompilatorem?

Dzięki!!

EDYTOWAĆ:

  1. Wypróbowałem to rozwiązanie polegające na odinstalowaniu libv8 i ponownej instalacji przez brew install. Wspomniano o tym również w kilku podobnych pytaniach. Brak szczęścia.

  2. Próbowałem również CC, CXXi CPPzmiennych środowiskowych, jak opisano tutaj , chociaż nie sądzę, że ma żadnego wpływu, gdyż została już podnosząc mój gcc v4.6kompilatora.

user2490003
źródło
to ten , może być?
dax
2
<sigh> Zawsze miałem problem z instalacją therubyracer na mac = (
maerics

Odpowiedzi:

167

Te kroki zadziałały dla mnie.

System operacyjny: 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
rider_on_rails
źródło
Zaakceptując tę ​​odpowiedź, z jedną zmianą. Zamieniłem kroki 3 i 2, aby działało - zainstaluj libv8, a następnie zainstalujruby racer. Dzięki!
user2490003
Dzięki, to zadziałało jak urok! Muszę się męczyć, ale byłoby pomocne, gdyby zamiast numerów wersji w instrukcjach były ostrza, musiałem zainstalować różne wersje, ale po prostu kopiuję twoje notatki.
Witryny internetowe Taylored
Zauważ, że wersja libv8 jest krytyczna, jak zauważono tutaj, że wydanie z nieparzystego punktu (ostatnie dwie cyfry w wersji) również zawiera plik binarny.
Jimmy Chu
Instalacja / odinstalowanie / ponowna instalacja tańca działała dla mnie na Mojave. Nienawidzę tych starych rzeczy! : D
emptywalls
74

Dla tych, którzy borykali się z tym problemem w OS X El Capitan, to rozwiązanie z wątku z grubego wskaźnika było tym, co ostatecznie zadziałało:

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

Biegałem też brew install gccwcześniej, ale nie jestem pewien, czy było to rzeczywiście konieczne.

Andy Stuhl
źródło
1
Musiałem usunąć mój Gemfile.lock, zanim w końcu zadziałał. Dzięki za podpowiedź.
abuzze
4
+1, ale dla przyszłych czytelników będziesz chciał to zrobić gem install libv8 -v 'A.B.C.D'w razie potrzeby. W chwili pisania tego tekstu jest 3.16.14.15.
Dave Land
1
+1, W przypadku, gdy chcesz zainstalować konkretną wersję therubyracer użycia:gem install therubyracer -v 'x.x.x' -- --with-v8-dir=/usr/local/opt/v8-315
AVITAL
1
Wygląda bardzo podobnie do odpowiedzi Jottr. Może rzucić mu krzyk.
omikes
5
Dla mnie dir v8 to: /usr/local/opt/[email protected]
SamuelLJohnson
26

Spróbuj najpierw odinstalować libv8 gem, następnie zainstaluj rubyracer, a następnie libv8

gem uninstall libv8
gem install therubyracer
gem install libv8 -- --with-system-v8
Nikhil
źródło
1
Brak powodzenia :( Poniższe wiersze błędu wydawały się interesujące: g ++ - 4.6: error: x86_64: Brak takiego pliku lub katalogu g ++ - 4.6: error: nierozpoznana opcja '-arch'
user2490003
1
Odkryłem, że instalacja libv8wcześniej therubyracerdziała lepiej.
Chris Peters,
24

Tertom za rozwiązanie zamieszczone na github rozwiązać go dla mnie, po wypróbowaniu wszystkich innych rozwiązań proponowanych w danym numerze github i tutaj.
Miałem dokładnie taką samą konfigurację systemu.
To jest na el capitan, więc nie jest to dokładna odpowiedź na pytanie, ale ludzie mogą uznać te informacje za pomocne.

Cytuję to tutaj dla lepszej widoczności:

Rozwiązał ten sam problem

  • 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

Jeśli nie możesz również zainstalować libv8,

gem install libv8 --with-system-v8

lub

bundle config build.libv8 --with-system-v8
jottr
źródło
1
To zadziałało dla mnie. Zauważyłem, że muszę określić wersję libv8 gem, którą Rubyracer spodziewał się zainstalować.
Paul Sturgess
1
Tak, uważam, że bundle config build.libv8 --with-system-v8był dla mnie kluczem. Dzięki!
natebeaty
To była jedyna rzecz, która zadziałała dla mnie (i próbowałem pod koniec 2019 roku na Catalinie)
Sam Johnson
Bardzo pomocny, mimo że homebrew / Version został przestarzały. Mój problem polegał na tym, że mój obecny link był powiązany z „/ usr / local / bin / d8”. Odłączenie tego i bieganie brew link --force v8-315zadziałało dla mnie. 2/2020 - MacOS 10.15.3. - Ruby w wersji 1.9.3 - Bundler 1.16.4 - libv8 w wersji 13.16.14.19
Thomas
12

Dla wszystkich, którzy używają macOS 10.15, napar się zmienił, więc będziecie musieli wykonać te polecenia.

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/[email protected]
bundle install
nzajt
źródło
6

Powyższe odpowiedzi nie działają dla mnie; moja konfiguracja pakietu jest disable-shared-gemswłączona, co powoduje dodatkowe problemy.

Używam Yosemite 10.10.1, Rails 3.2.x i Ruby 1.9.3p550.

Poniższy fragment bin/setupkodu w moim rozwiązał problem.

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
kocham Włochy
źródło
4

Znalazłem obejście powyższego problemu.

Jest to bardziej zgodne z libv8 i therubyracer.

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

gem install therubyracer -v '0.10.2'

To powinno działać dobrze, ponieważ obie wersje są ze mną kompatybilne. Początkowo próbowałem zainstalować wersję 0.12.0 dla therubyracer i napotkałem problem. Po przełączeniu na wersję 0.10.2 wszystko działało dobrze.

Mój obecny system operacyjny: Mavericks

arpiagar
źródło
3

Mam ten problem dla MacOS Mojave 10.14.2i udało mi się go naprawić, gdy znalazłem, gdzie pakiet v8-315został zainstalowany i jaka była nazwa folderu. W moim przypadku to było tutaj /usr/local/opt/[email protected].

Aby to naprawić, uruchomiłem dalej:

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/[email protected]
bundle install
Mavka Poltavka
źródło
1

Po złamaniu głowy przez prawie dwa dni to zadziałało.

rvm install 2.2.2
gem install rails
bundle install
Sunil Sharma
źródło
1

Nie mogłem zmusić therubyracer do zbudowania na macOS Catalina 10.15 ze względu na zależność od libv8, pomimo zainstalowania x64 (wariant 64-bitowy) libv8.

Rozwiązaniem dla mnie było przejście z therubyracer na mini_racer, zainstalowany klejnot mini_racer (bez konieczności budowania lokalnie) i, hej presto! Mógłbym kontynuować.

Spróbuj!

Nożyce
źródło
Z wyjątkiem sytuacji, gdy twój projekt wymaga MNIEJ plików do skompilowania do CSS: /
Martin Carel
1

W moim przypadku

MacOS: Catalina , Ruby: 2.3.3 , Using rbenv (not RVM), I Required therubyracer version: 0.12.3 (nie ma znaczenia)

Wypróbowałem wszystkie rozwiązania, ale co mi zadziałało, drodzy proszę nie kopiuj na ślepo rozwiązania wklejania (bcz zrobiłem w moim przypadku), najpierw przeczytaj, a następnie zmień wersje w poniższych poleceniach, jeśli jakieś potrzebujesz. Większość poleceń jest powszechna w większości istniejących odpowiedzi, ale to, co zadziałało dla mnie gem install therubyracer -- --with-v8-dir=$(brew --prefix v8-315)zamiast gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8-315Podziękowania dla Junji Zhi za komentarz w tej odpowiedzi

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)

Gotowe, a następnie kontynuuj z bundle install

Uwaga : Podczas instalacji gemów therubyracer sprawdź, która wersja libv8 jest instalowana, jeśli jest inna niż ta, o której wspomniałem w kroku 4 , twój therubyracer może się nie zainstalować, więc po prostu zrób jedną rzecz, gem uninstall libv8a następnie powtórz krok 4 , zmieniając wersja , którą można zobaczyć w konsoli podczas montażu rubyracer

shubham mishra
źródło
1

To zadziałało dla mnie:

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/[email protected]'

Dla ostatniego polecenia sprawdź wyjście brew --prefix v8-315w moim przypadku to było /usr/local/opt/[email protected].

jmarceli
źródło
0

Poniższe polecenia rozwiązały to dla mnie w Catalinie z pakietem

$ brew install v8@3.15
$ bundle config build.libv8 --with-system-v8
$ bundle config build.therubyracer --with-v8-dir=$(brew --prefix v8@3.15)
$ bundle install
Mike Aono
źródło
-2

Zauważyłem, że kiedy napotkamy problem:

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

Następnie powinieneś zainstalować build-essential

sudo apt install build-essential

U mnie działa z problemami z instalacją mini_race.

Adrian
źródło
-3

Po prostu uruchomiłem aktualizację pakietu i zadziałało.

Obs .: Korzystanie z Ruby 2.3.0

Thiago Rodrigues
źródło