gem install therubyracer -v '0.10.2' на OSX Mavericks не устанавливается

Пытаюсь установить therubyracer на Mavericks с помощью «gem install therubyracer -v '0.10.2'», но получаю следующую ошибку:

/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

может ли кто-нибудь помочь мне понять, как заставить этот драгоценный камень работать? У меня установлены инструменты командной строки.


person user2711889    schedule 28.10.2013    source источник
comment
У вас есть homebrew? Попробуйте установить v8 с помощью brew install v8 перед установкой gem   -  person Ivan Shamatov    schedule 28.10.2013
comment
Я считаю, что brew install v8 — это отдельная проблема. См. stackoverflow.com/questions/11598655/therubyracer-install-error. для получения подробной информации о v8 с brew.   -  person Ash Blue    schedule 12.11.2013


Ответы (12)


Если вы решите использовать более новую версию therubyracer gem, у вас больше не будет этой проблемы.

В противном случае:

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
person Julian Popov    schedule 22.11.2013
comment
Этот подход кажется лучше, чем модификация символических ссылок - person Nilesh; 23.11.2013
comment
Ошибка: нет доступной формулы для apple-gcc42 - person Abe Petrillo; 03.12.2013
comment
brew tap homebrew/dupes исправляет ошибку: нет доступной формулы для apple-gcc42 - person TomFuertes; 03.12.2013
comment
Это НАКОНЕЦ решило проблему для меня — спасибо! Я попробовал решение для символической ссылки М. Скотта Форда, приведенное ниже, и оно показалось работающим, но выдало ошибку, когда я на самом деле попытался что-либо сделать (грабли, рельсы и т. д.). - person Kyle Fox; 31.12.2013
comment
Ваше обновление до therubyracer 0.12.0 устранило эту проблему для меня. - person jackocnr; 21.01.2014
comment
Мне также пришлось добавить RUBYOPT=-rrubygems, как и в этот вопрос - person Lloeki; 10.02.2014
comment
У меня отлично сработало (тоже с использованием bundle install). - person Thibaut Barrère; 18.02.2014
comment
у меня работал экспорт CC, CXX и CPP. Спасибо. Установка другой, более свежей версии therubyracer тоже сработала, но я не могу обновить версию Gem в одном из проектов: большое спасибо :-) - person Pascal; 03.03.2014
comment
К сожалению, ни одно из этих решений не работает для меня на OSX 10.9, ruby ​​2.1.0 и therubyracer 0.12.1. - person turboladen; 02.06.2014
comment
Работал и на OS X 10.11. - person shock_one; 18.08.2015
comment
Я получаю apple-gcc42: This formula either does not compile or function as expected on macOS, когда запускаю brew install apple-gcc42 - person Wylliam Judd; 07.09.2017
comment
Использование macOS версии 10.12.6 - person Wylliam Judd; 07.09.2017
comment
У меня похожая проблема, но это решение не работает. Любые идеи? stackoverflow.com/questions/46104063/ - person Wylliam Judd; 08.09.2017

Итак, я, наконец, заработал после некоторых усилий... благодаря Саймону и Альваро.

У меня есть одна вещь, которую я могу добавить: использование флага --with-system-v8 у меня не сработало... Поэтому я удалил свою систему v8 с помощью

brew uninstall v8

И бег

gem install libv8

Если вы уже запускали gem install libv8 с системным флагом v8, обязательно удалите эту версию gem (сделайте это, запустив gem uninstall libv8). Важно то, что вы не должны использовать тот, который предоставляется brew, похоже, он не работает в Mavericks (он устанавливается хорошо, и упаковщик сообщит, что ваш пакет завершен, но ваше приложение потерпит неудачу, когда оно попытается использовать v8 ).

Подводя итог ответу, мне помогло следующее:

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
person damianmr    schedule 04.11.2013
comment
Это сработало для меня. Но я связал gcc с /usr/local/bin и перезапустил терминал, чтобы удалить его после установки libv8. - person Jamon Holmgren; 20.11.2013
comment
Связывать бинарные файлы homebrew с этой конкретной версией в /usr/bin — действительно плохая идея. Следующий brew update, который появится и перевернет эти пути, оставит вас в сломанном состоянии. - person mrm; 05.05.2014

У меня была такая же проблема, это работает для меня:

therubyracer (0.10.2) и libv8 (3.3.10.4)

Прежде всего:

  • brew install apple-gcc42
  • необходимо слинковать все бинарные файлы компиляторов (gcc, cpp, g++) на /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/<compiler>

После этого вы можете попробовать следующее:

  • brew install v8
  • gem install libv8 -v '3.3.10.4' -- --with-system-v8
  • gem install therubyracer -v 'therubyracer' или bundle install в каталог проекта rails.
person Alvaro    schedule 03.11.2013
comment
apple-gcc42: This formula either does not compile or function as expected on macOS Моя macOS 10.12.6 - person Wylliam Judd; 08.09.2017

У меня была та же проблема, и одним из решений является в настоящее время использование apple-gcc42 вместо clang для компиляции обоих драгоценных камней:

brew install apple-gcc42

И тогда у вас есть выбор между созданием некоторых символических ссылок в /usr/bin для двоичных файлов {gcc,g++,c++}:

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

На самом деле g++ должно быть достаточно.

Или... вы можете экспортировать переменные среды CC/CXX/CPP с путями, соответствующими двоичным файлам, созданным доморощенным. Это, безусловно, более чистый обходной путь.

Третье решение — загрузить Xcode 4.6.3 и установить его в папку Applications. Затем введите в терминале:

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

После установки драгоценного камня вы можете вернуться к Xcode 5.0:

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
person Simon    schedule 28.10.2013
comment
Как переключить компилятор на apple-gcc42? - person user2711889; 28.10.2013
comment
@Simon, когда я пытаюсь подключиться к компиляторам, я получаю сообщение о том, что файл существует. Это файл clang? Если я запускаю пакетную установку, похоже, что он не использует gcc, потому что ошибка полна ссылок clang. - person isea; 04.11.2013
comment
Если вы используете MacPorts, вам не нужно указывать символическую ссылку на другую версию GCC, для этого есть встроенная команда (см. мой ответ). - person jshkol; 18.11.2013

Я нашел обходной путь, который работал без установки apple-gcc42.

Это будет работать, если сообщение об ошибке, которое вы получаете, выглядит так:

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'

Затем вы сможете сделать следующее:

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

Источник: https://github.com/cowboyd/therubyracer/issues/277#issuecomment-27734348

person M. Scott Ford    schedule 12.11.2013
comment
Огромный +1 за это. Драгоценный камень устанавливался через интерфейс командной строки, но RubyMine v6 отказывался его устанавливать... установка этой символической ссылки окончательно решила проблему. Спасибо! - person Ode; 16.12.2013
comment
Это 1000%, ура @M.ScottFord. Я использую rvm, поэтому мой оператор ln был таким: 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 - person Dave Foster; 01.04.2014

Как предлагается во многих ответах, проще всего скомпилировать собственные расширения Ruby Racer с Apple GCC 4.2 (вместо версии, установленной с Xcode).

Если вы используете MacPorts, вам не нужно вручную настраивать символические ссылки для двоичных файлов GCC. Команда port select сделает это за вас. Если вы не обновляли MacPorts после установки Mavericks, сделайте sudo port selfupdate. Обновив MacPorts, попробуйте следующее:

# 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

В общем, эта процедура (sudo port select gcc [version]) будет работать каждый раз, когда вы хотите использовать определенную версию GCC вместо той, которая установлена ​​Xcode (Apple LLVM v5 для 10.9 Mavericks/Xcode 5).

person jshkol    schedule 18.11.2013
comment
Работал у меня на Маверикс. - person Evo_x; 08.03.2014

Мне удалось установить therubyracer 0.12 и libv8 3.16.14.3 на ruby ​​2.0.0p353 и os x 10.9

libv8 требует 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 требует более поздней версии 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

используйте bundle вместо gem install therubyracer

person Eugene    schedule 24.11.2013
comment
Спасибо! Это, наконец, помогло мне преодолеть bundle install после нескольких дней проб и ошибок. Единственное, что я сделал по-другому, это удалить все инструменты разработчика, которые были установлены brew, пока gcc --version не сообщил, что это версия Apple LLVM и настроен с помощью Xcode, затем я переместил существующий /usr/bin/gcc (и др.) перед символической ссылкой на apple-gcc42 libs, затем вместо установки gcc49 (в прошлый раз, когда я пытался настроить его самостоятельно) я просто скопировал исходные библиотеки gcc, g++ и cpp обратно. Учитывая, что я перепробовал 3 десятка разных способов, чтобы найти тот, который сработал для меня, YMMV - person Chris Bloom; 24.05.2014

Это должен быть безопасный и чистый способ (без символических ссылок) установить therubyracer для тех, у кого возникли проблемы.

Взято из: gem install therubyracer -v 0.11.4 не работает в OS X 10.10

установите Xcode (если у вас еще нет одной из этих версий) 6.1.1, 6.2-бета или 6.3-бета и (нужна эта) 4.6.3

gem uninstall libv8 если вы еще этого не сделали

переключиться на Xcode 4.6.3

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

gem install libv8 -v '3.11.8.17' Или какая версия привязана к вашей версии therubyracer

переключитесь на Xcode 6.1.1, 6.2-beta или 6.3-beta (или, если вы хотите попробовать свою текущую установку Xcode, измените эту строку, я подтвердил, что все 3 из них работают)

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

gem install therubyracer -v '0.11.4' или версию, которую вы пытаетесь установить.

person Travis    schedule 03.02.2015
comment
Спасибо @ th01, это сработало для меня ... Я пробовал все, что мог найти, в течение 3 часов ... в моем случае это был драгоценный камень libv8. Скачал Xcode4.6.3 и запустил его с этой версией, и он был успешно установлен. Вот ссылка с кратким руководством по установке нескольких версий Xcode: blogs.oracle.com/ мобильный/вход/how_to_install_multiple_xcodes - person miligraf; 10.02.2015
comment
Когда я загружаю Xcode 4.6.3 и затем запускаю sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developer, а затем запускаю gem install libv8 -v '3.3.10.4', я получаю: unable to locate xcodebuild, please make sure the path to the Xcode folder is set correctly! Что я делаю неправильно? - person Wylliam Judd; 08.09.2017

У меня была почти идентичная ошибка при попытке установить therubyracer 0.12.0, чтобы заставить его работать с libv8. Это сработало для меня:

$ 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
person Javid Jamae    schedule 14.01.2016

У меня была такая же проблема, когда я обновлялся с OSX Mountain Lion до OSX Mavericks.

Обновление с ruby-1.8.7-p354 до ruby-1.8.7-375 помогло мне.

Возможно, попробуйте обновиться с ruby ​​1.9.3-p194 до rc1 (теперь 1.9.3 выше p484)

если вы используете rbenv:

rbenv install 1.9.3-rc1
rbenv rehash
rbenv global 1.9.3-rc1
bundle install
person nelsonenzo    schedule 05.04.2014

У меня была эта проблема после обновления с Mavericks до Yosemite. Проблема заключалась в том, что я скомпилировал свою версию Ruby со старой версией OSX.

Если бы я побежал

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

Я бы получил x86_64-darwin-13 вместо x86_64-darwin-14 для Йосемити.

Чтобы переустановить Ruby I

  1. Полностью удалена старая версия: rvm remove ruby-2.1.1
  2. Переустановлен из исходного кода ( --disable-binary не использует предварительно скомпилированные двоичные файлы и принудительно выполняет сборку): rvm reinstall --disable-binary 2.1

Затем я смог запустить bundle install без ошибок, попробовав все приведенные выше решения.

person Moemars    schedule 30.04.2015

Что я сделал, так это на OSX Mavericks:

git clone [email protected]:cowboyd/therubyracer.git

Потом:

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

Эта процедура загрузила бинарную версию libv8 и установила ее.

person darmou    schedule 22.07.2014