«Gem install therubyracer -v '0.10.2'» на osx mavericks не устанавливается

91

Пытаюсь установить 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

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

user2711889
источник
У тебя есть homebrew? Попробуйте установить v8 с помощью brew install v8перед установкой gem
Иван Шаматов
Я считаю, что brew install v8 - это отдельная проблема. См. Stackoverflow.com/questions/11598655/therubyracer-install-error для получения подробной информации о версии 8 с brew.
Ash Blue

Ответы:

243

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

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

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
Юлиан Попов
источник
11
Этот подход кажется лучше, чем изменение символических ссылок
Nilesh
3
brew tap homebrew/dupesисправляет «Ошибка: нет доступной формулы для apple-gcc42»
TomFuertes
1
Это НАКОНЕЦ решило проблему для меня - спасибо! Я попробовал решение для символической ссылки М. Скотта Форда ниже, и оно, похоже, сработало, но выдало ошибку, когда я действительно пытался что-то сделать (грабли, направляющие и т. Д.).
Кайл Фокс
2
Ваше обновление до therubyracer 0.12.0 устранило эту проблему для меня.
jackocnr
6
К сожалению, ни одно из этих решений не работает у меня на OSX 10.9, ruby ​​2.1.0 и therubyracer 0.12.1.
turboladen 01
16

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

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

brew uninstall v8

И бег

gem install libv8

Если вы уже работали gem install libv8с системным флагом v8, обязательно удалите эту версию гема (сделайте это, запустив 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
Damianmr
источник
2
Это сработало для меня. Но я привязал gcc к / usr / local / bin и перезапустил терминал, чтобы удалить его после установки libv8.
Jamon Holmgren
2
Связывание двоичных файлов homebrew с этой конкретной версией в / usr / bin - действительно плохая идея. Следующее, brew updateчто придет и повернет эти пути, оставит вас в разбитом состоянии.
mrm
10

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

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в каталог проекта рельсов.
Альваро
источник
apple-gcc42: This formula either does not compile or function as expected on macOS Моя macOS - 10.12.6
Уиллиам Джадд
7

У меня была такая же проблема, и одним из решений в настоящее время является использование 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 с путями, соответствующими двоичным файлам, созданным homebrew. Это, безусловно, более чистый обходной путь.

Третье решение - загрузить 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
Саймон
источник
Как переключить компилятор на apple-gcc42?
user2711889
@Simon, когда я пытаюсь выполнить символьную привязку к компиляторам, я получаю сообщение, что файл существует. Это файл clang? Если я запустил установку пакета, похоже, что он не использует gcc, потому что ошибка полна ссылок на clang.
isea
Если вы используете MacPorts, вам не нужно использовать символическую ссылку, чтобы указать на другую версию GCC, для этого есть встроенная команда (см. Мой ответ).
jshkol
6

Я нашел обходной путь, который работал без установки 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

М. Скотт Форд
источник
Огромный +1 для этого. Драгоценный камень будет установлен в CLI, но RubyMine v6 отказывался установить его ... установка этой символической ссылки окончательно решила проблему. Благодарность!
Ode
1
Это 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
Дэйв Фостер
3

Как предлагается во многих ответах, проще всего скомпилировать собственные расширения 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).

jshkol
источник
1
У меня работал над индивидуалками.
Evo_x 08
3

Мне удалось установить rubyracer 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

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

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

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

установите Xcode (если у вас еще нет одной из этих версий) 6.1.1, 6.2-beta или 6.3-beta и (это необходимо) 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' или версию, которую вы пытаетесь установить.

Трэвис
источник
1
Спасибо @ th01, у меня сработало ... Я пробовал все, что мог найти, в течение 3 часов ... в моем случае это был гем libv8. Загрузил Xcode4.6.3 и запустил его с этой версией, и он был успешно установлен. Вот ссылка с кратким
miligraf
Когда я загружаю 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! Что я делаю неправильно?
Уиллиам Джадд 08
1

У меня была почти такая же ошибка при попытке установить rubyracer 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
Джавид Джамае
источник
0

У меня была такая же проблема, когда я обновился с 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
Нельсонензо
источник
0

У меня возникла эта проблема после обновления с 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попробовал все вышеперечисленные решения, я смог работать без ошибок.

Moemars
источник
-2

Что я сделал, так это на osx mavericks:

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

Затем:

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

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

Дарму
источник