“Gem встановити therubyracer -v '0.10.2'” на OSX Mavericks не встановлюється


90

Спроба встановити 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

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


Ви маєте homebrew? Спробуйте встановити v8 за допомогою, brew install v8перш ніж встановлювати самоцвіт
Іван Шаматов

Я вважаю, що Brew Install v8 - це окреме питання. Будь ласка , см stackoverflow.com/questions/11598655/therubyracer-install-error докладної інформації про v8 з варивом.
Ash Blue

Відповіді:


242

Якщо ви вирішите використовувати нову 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
Такий підхід здається кращим, ніж модифікація символічних посилань
Нілеш,

3
brew tap homebrew/dupesвиправлено "Помилка: Немає доступної формули для apple-gcc42"
TomFuertes

1
Це нарешті вирішило проблему для мене - дякую! Я спробував вирішення символічного посилання М. Скотта Форда нижче, і воно, здавалося, спрацювало, але виникла помилка, коли я насправді намагався щось зробити (граблі, рейки тощо).
Kyle Fox

2
Оновлення до therubyracer 0.12.0 вирішило цю проблему для мене.
jackocnr

6
На жаль, жодне з цих рішень не працює для мене на OSX 10.9, ruby ​​2.1.0 та therubyracer 0.12.1.
turboladen

16

Отож я нарешті змусив це працювати після певних труднощів ... завдяки Саймону та Альваро.

Я маю додати одну річ, хоча використання прапора --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

2
Це спрацювало для мене. Але я зв'язав gcc до / usr / local / bin і перезапустив термінал, щоб я міг видалити його після встановлення libv8.
Jamon Holmgren

2
Символічне зв’язування доменних файлів із цією версією до / 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

Я просто була така ж проблема і одне рішення в даний час використовувати яблучний gcc42 замість брязкотом зібрати дорогоцінні камені:

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, коли я намагаюся зробити зв'язок із компіляторами, я отримую повідомлення про те, що файл існує. Це файл файлу? Якщо я запускаю bundle install, здається, він не використовує 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 відмовлявся встановити його ... встановлення цього символічного посилання врешті вирішило проблему. Дякую!
Ода

1
Це 1000%, вітаю @ M.ScottFord. Я використовую rvm, тому моєю заявою було наступне: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).


1
Працював у мене на mavericks.
Evo_x

3

Мені вдається встановити 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


Дякую! Це, нарешті, провалило мене 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' Або будь-яка версія прив’язана до вашої версії rubyracer

перейти на 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 і запустив його з цією версією, і він був успішно встановлений. Ось посилання з коротким підручником про те, як встановити кілька версій Xcode: blogs.oracle.com/mobile/entry/how_to_install_multiple_xcodes
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! Що я роблю неправильно?
Вільям Джадд,

1

У мене була майже однакова помилка при спробі встановити 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

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 на Йосеміті. Проблема полягала в тому, що я скомпілював свою версію 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без помилок, спробувавши всі наведені вище рішення.


-2

Те, що я зробив, було на OSX Mavericks:

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

Тоді:

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

Ця процедура завантажила двійкову версію libv8 та встановила її.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.