therubyracer - Gem :: Ext :: BuildError: ПОМИЛКА: Не вдалося створити власне розширення gem


82

Я намагаюся встановити наступні версії gem на Mavericks

  • libv8 (3.16.14.3)
  • therubyracer (0.12.1)

Очевидно, що коштовності rubyracer залежать від libv8.

1) Встановлення libv8

Що таке libv8? Здається, моє невелике дослідження свідчить про те, що це якась бібліотека javascript, яка використовується Google Chrome?

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

Тож я встановив libv8с

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

Я розумію, що це встановлює дорогоцінний камінь, але використовує мою локальну системну установку бібліотеки v8 замість ... версії, яка постачається з самоцвітом? У будь-якому випадку, це було успішно.

2) Встановлення rubyracer

Під час наступного кроку у мене виникли проблеми з установкою therubyracergem. Я не зовсім впевнений, що робить цей самоцвіт, просто що це залежність проекту рейок, який я намагаюся зробити bundle install.

Це видає мені таку помилку:

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

З того, що я можу зібрати, я вирішив встановити, libv8використовуючи мою локальну бібліотеку V8 замість того, що було надано libv8, але тепер, коли локальна установка не може бути знайдена.

  • Як перевірити, чи справді встановлений V8, і як його знайти?
  • Я спробував кілька зазначених прапорців, здавалося, жоден з них не вказував дорогоцінний камінь у правильний каталог встановлення
  • Це може бути окрема тема, але що extconf.rb? Я бачив це в декількох місцях. І що gccконкретно він намагається зробити з компілятором?

Дякую!!

РЕДАГУВАТИ:

  1. Я спробував це рішення видалення libv8 та повторної установки через brew install. Про це також згадувалося в парі подібних питань. Нещастить.

  2. Я також спробував CC, CXXі CPPзмінні оточення , як описано тут , хоча я не думаю , що має якесь - яку дію , як це вже було збирання мого gcc v4.6компілятора.


це це , може?
dax

2
<sigh> у мене завжди були проблеми з встановленням rubyracer на mac = (
maerics

Відповіді:


167

Ці кроки спрацювали для мене.

ОС: Маверік Рубі: 2.1.1

gem uninstall libv8
gem install therubyracer -v '0.11.3'
gem install libv8 -v '3.11.8.13' -- --with-system-v8

Приймаючи цю відповідь, з однією зміною. Я переключився на кроки 3 і 2, щоб він працював - встановіть libv8, а потім встановіть the ruby ​​racer. Дякую!
user2490003

Дякую, це спрацювало як шарм! Напевно, я втомився, але було б корисно, якщо б у ваших інструкціях були замість номерів версій різкі символи, мені потрібно було встановити різні версії, але я просто копіював ваші примітки.
Веб-сайти Taylored

Зверніть увагу, що версія libv8 є критично важливою, оскільки тут зазначається, що випуск непарної точки (дві останні цифри у версії) також містить двійковий файл.
Jimmy Chu

Танець встановлення / видалення / перевстановлення працював у мене на Mojave. Я ненавиджу цю стару річ! : D
emptywalls

74

Для тих, хто стикається з цією проблемою в OS X El Capitan, це рішення із потоку проблеми therubyracer для мене нарешті спрацювало:

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

Я також балотувався brew install gccраніше, але не впевнений, чи насправді це було потрібно.


1
Мені довелося видалити свій Gemfile.lock, перш ніж він нарешті запрацював. Thx для підказки.
abuzze

4
+1, але для майбутніх читачів ви захочете, gem install libv8 -v 'A.B.C.D'як слід. На момент написання статті це 3.16.14.15.
Дейв Ленд,

1
+1, якщо ви хочете встановити конкретну версію використання rubyracer:gem install therubyracer -v 'x.x.x' -- --with-v8-dir=/usr/local/opt/v8-315
avital

1
Схоже на відповідь Джоттра. Може, викинути йому крик.
omikes

5
Для мене v8 dir був: /usr/local/opt/v8@3.15
SamuelLJohnson

26

Спробуйте спочатку видалити gb libv8, потім встановіть rubyracer, а потім libv8

gem uninstall libv8
gem install therubyracer
gem install libv8 -- --with-system-v8

1
Не пощастило :( Ці рядки з помилкою видались цікавими: g ++ - 4.6: помилка: x86_64: Немає такого файлу або каталогу g ++ - 4.6: помилка: невпізнана опція '-arch'
user2490003

1
Я виявив, що встановлення libv8раніше therubyracerпрацює краще.
Кріс Пітерс,

24

Tertom в розчині розміщений на GitHub вирішив це для мене, після того , як випробувані всіх інших запропонованих рішень по відповідному питанню GitHub і тут.
У мене була точно така ж конфігурація системи.
Це на el capitan, тож не точна відповідь на запитання, але людям ця інформація може бути корисною.

Я посилаюся тут для наочності:

Вирішив ту ж проблему

  • MacOS 10.11.2
  • рубін 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

Якщо ви також не можете встановити libv8,

gem install libv8 --with-system-v8

або

bundle config build.libv8 --with-system-v8

1
Це спрацювало для мене. Я виявив, що мені потрібно вказати версію libv8 gem, яку rubyracer очікував встановити.
Пол Стерджесс

1
Так, я вважаю, bundle config build.libv8 --with-system-v8що для мене це було ключем. Дякую!
natebeaty

Це було єдине, що працювало у мене (і намагалося наприкінці 2019 року на
Сем Джонсон,

Дуже корисно, хоча homebrew / версії були застарілими. Моя проблема полягала в тому, що моє поточне посилання було пов'язане з '/ usr / local / bin / d8'. Від’єднання цього та біг brew link --force v8-315працювали для мене. 2/2020 - MacOS 10.15.3. - Рубі версія 1.9.3 - Пакет 1.16.4 - libv8 версія 13.16.14.19
Томас

12

Для всіх вас, що використовують macOS 10.15, brew змінився, тому вам потрібно буде виконати ці команди.

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/v8@3.15
bundle install

6

Наведені вище відповіді для мене не працювали; мій пакетування конфігурація має disable-shared-gemsвключена , який викликає додаткові проблеми.

Я використовую Yosemite 10.10.1, Rails 3.2.x та Ruby 1.9.3p550.

Наступний фрагмент у моєму документі bin/setupвирішив проблему для мене.

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

4

Я знайшов вирішення вищезазначеної проблеми.

Це швидше сумісність між libv8 та therubyracer.

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

gem install therubyracer -v '0.10.2'

Це має працювати нормально, оскільки обидві версії сумісні зі мною. Спочатку я намагався встановити версію 0.12.0 для therubyracer і стикався з проблемою. Після того, як я перейшов на версію 0.10.2, все працювало нормально.

Моя поточна ОС: Mavericks


3

У мене виникла ця проблема, MacOS Mojave 10.14.2і я зміг вирішити цю проблему, коли виявив, де v8-315встановлено пакет і яке ім’я папки. У моєму випадку це було тут /usr/local/opt/v8@3.15.

Щоб це виправити, я запустив наступне:

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/v8@3.15
bundle install

1

Після розбиття голови протягом майже двох днів це в мене спрацювало.

rvm install 2.2.2
gem install rails
bundle install

1

Я не зміг змусити therubyracer будувати на macOS Catalina 10.15 через залежність libv8, незважаючи на встановлення x64 (64-розрядний варіант) libv8.

Рішенням для мене було переключення з rubyracer на mini_racer, встановлений самоцвіт mini_racer (без необхідності локальної збірки) і, привіт! Я міг би продовжувати.

Спробуй це!


За винятком випадків, коли ваш проект вимагає МЕНШИХ файлів для компіляції в CSS: /
Мартін Карел

1

У моєму випадку

MacOS: Каталіна , Рубі: 2.3.3 , Використання rbenv (не RVM), я вимагав версію rubyracer: 0.12.3 (не має значення)

Я спробував усі рішення, але те, що в мене вийшло, шановний, будь ласка, не копіюйте сліпо рішення для вставки (bcz, як я це зробив у своєму випадку), спочатку прочитайте, а потім змініть версії в наведених нижче командах, якщо вам потрібні. Більшість команд є загальними в більшості існуючих відповідей, але те, що спрацювало для мене, gem install therubyracer -- --with-v8-dir=$(brew --prefix v8-315)замість gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8-315Дякую Джунджі Чжі за його коментар у цій відповіді

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)

Готово, потім продовжуйте з вашим bundle install

Примітка : Поки gem встановлює therubyracer , перевірте, яку версію libv8 встановлюєте, якщо вона відрізняється від тієї, про яку я згадав на кроці 4 , ваш therubyracer може не встановитись, тому просто зробіть одне, gem uninstall libv8а потім повторіть крок 4 , змінивши версія , яку ви можете побачити на консолі під час встановлення rubyracer


1

Це спрацювало для мене:

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/v8@3.15'

Для останньої команди перевірте результат, brew --prefix v8-315в моєму випадку це було /usr/local/opt/v8@3.15.


0

Наведені нижче команди вирішили це для мене в Catalina з пакетом

$ 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

-2

Я помітив, що коли ми стикаємось із проблемою:

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

Потім слід встановити build-vital

sudo apt install build-essential

Це працює у мене з проблемами встановлення mini_race.


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