“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.