Не вдалося створити нативне розширення Gem (установка Compass)


275

Коли я намагаюся встановити останню версію компаса ( https://rubygems.org/gems/compass/versions/1.0.0.alpha.17 ), я отримую таку помилку.

ERROR:  Error installing compass:
ERROR: Failed to build gem native extension.

 ERROR:  Error installing compass:
  ERROR: Failed to build gem native extension.

    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb
checking for ffi.h... no
checking for ffi.h in /usr/local/include,/usr/include/ffi... yes
checking for ffi_call() in -lffi... yes
checking for ffi_prep_closure()... yes
checking for ffi_raw_call()... no
checking for rb_thread_blocking_region()... yes
checking for rb_thread_call_with_gvl()... yes
checking for rb_thread_call_without_gvl()... yes
checking for ffi_prep_cif_var()... no
creating extconf.h
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling AbstractMemory.c
compiling ArrayType.c
compiling Buffer.c
compiling Call.c
Call.c:303:5: warning: implicit declaration of function 'rb_thread_call_without_gvl' is invalid in C99 [-Wimplicit-function-declaration]
    rbffi_thread_blocking_region(call_blocking_function, data, (void *) -1, NULL);
    ^
./Thread.h:78:39: note: expanded from macro 'rbffi_thread_blocking_region'
# define rbffi_thread_blocking_region rb_thread_call_without_gvl
                                      ^
1 warning generated.
compiling ClosurePool.c
compiling DataConverter.c
DataConverter.c:43:1: warning: control may reach end of non-void function [-Wreturn-type]
}
^
1 warning generated.
compiling DynamicLibrary.c
compiling ffi.c
compiling Function.c
Function.c:479:33: warning: incompatible pointer types passing 'VALUE (void *)' to parameter of type 'void *(*)(void *)' [-Wincompatible-pointer-types]
        rb_thread_call_with_gvl(callback_with_gvl, &cb);
                                ^~~~~~~~~~~~~~~~~
Function.c:102:46: note: passing argument to parameter 'func' here
extern void *rb_thread_call_with_gvl(void *(*func)(void *), void *data1);
                                             ^
Function.c:563:9: warning: implicit declaration of function 'rb_thread_call_without_gvl' is invalid in C99 [-Wimplicit-function-declaration]
        rb_thread_call_without_gvl(async_cb_wait, &w, async_cb_stop, &w);
        ^
Function.c:738:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
3 warnings generated.
compiling FunctionInfo.c
compiling LastError.c
compiling LongDouble.c
compiling MappedType.c
compiling MemoryPointer.c
compiling MethodHandle.c
compiling Platform.c
compiling Pointer.c
compiling Struct.c
compiling StructByReference.c
compiling StructByValue.c
compiling StructLayout.c
compiling Thread.c
compiling Type.c
compiling Types.c
compiling Variadic.c
linking shared-object ffi_c.bundle
clang: error: unknown argument: '-multiply_definedsuppress' [-Wunused-command-line-argument-hard-error-in-future]
clang: note: this will be a hard error (cannot be downgraded to a warning) in the future
make: *** [ffi_c.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /Library/Ruby/Gems/2.0.0/gems/ffi-1.9.3 for inspection.
Results logged to /Library/Ruby/Gems/2.0.0/extensions/universal-darwin-13/2.0.0/ffi-1.9.3/gem_make.out

Що тут відбувається? Як встановити останній компас без помилок?



будь ласка, переконайтеся, що ви зробили в своїй системі.
Сортер

Відповіді:


577

Спробуйте це, а потім спробуйте встановити компас ще раз

apt-get install ruby-dev

33
Це виправляє помилку на Ubuntu, але, здається, OP використовує OSX.
mhnagaoka

1
Виправлено на Ubuntu 14.04 LTS
15:01

30
Працював над CentOS з "yum install ruby-devel", що є еквівалентом. Дякую !
B2F

6
Смішно знайти рішення моєї проблеми Ubuntu у відповіді на питання OSx. Тим не менш, ви отримали мою позицію, оскільки ваша відповідь просто вирішила мою проблему. Tnx!
e-sushi

3
Будь-яка ідея, як змусити це працювати в Windows? Я встановив інструменти розробки Ruby, choco install ruby2.devkitале все ще не працює
jtate

124

Для того, щоб встановити компас на Mac OS X 10.10 (Yosemite), потрібно було виконати наступне:

1. Налаштуйте середовище Ruby

  • Переконайтесь, що рубін встановлено та оновлено: ruby -v
  • Оновіть дорогоцінні камені sudo gem update --system

2. Налаштуйте середовище MAC

Встановіть інструменти командного рядка Xcode. Це ключ для встановлення Compass.

xcode-select --install

Встановлення інструментів командного рядка Xcode є ключовим фактором для того, щоб Компас працював на OS X

3. Встановіть компас

sudo gem install compass

3
Для мене це була правильна відповідь, йому потрібні інструменти командного рядка Xcode
svnm

2
Дякую, працювали для мене, ви маєте рацію, ключовими є інструменти командного рядка Xcode.
саркома

5
Це працювало для мене з одним доповненням - вам потрібно фактично запустити XCODE, щоб ви могли прийняти ліцензійну угоду і дозволити закінчити налаштування. Можливо, варто позначити свою відповідь.
Брюфорд

Прийняття оновлення (умов договору) через GUI також працювало.
касіоскабрал

На нещодавно оновленому MacBook Pro в Сьєрра 10.12.6 мені також довелося запустити "sudo xcodebuild -license", щоб прийняти умови, перш ніж запустити sudo gem встановити компас ....
jocherra

46

Найкращий спосіб - sudo apt-get install ruby-compassвстановити компас.


1
Нічого собі, іноді так просто ^^ намагалися встановити компас із дорогоцінним каменем, але були деякі залежності, які не вирішені дорогоцінним каменем. З apt-get це працювало чудово! Спасибі
naitsirch


30

Я боровся з вами тим же питанням близько 3 годин. Станом на Compass 1.0.alpha19, вимога передбачена для rvm версії 1.9.3.

Є декілька неприбраних дописів, але для мене це було наступне:

  1. sudo gem uninstall sass
  2. sudo gem uninstall compass
  3. rvm install ruby-1.9.3-p448
  4. sudo gem install sass --pre
  5. sudo gem install compass --pre

і це вдалося. Сподіваюсь, це працює і для вас!


Нещодавно у мене був той самий випуск, але з новою версією. Що я зробив, це видалити рубінову версію, яку я встановив раніше, з aptitude, а потім знову встановив її, дотримуючись інструкцій за адресою: rvm.io/rvm/install . З новою версією ruby ​​/ rvm компас правильно побудований.
adosaiguas

2
Дякую за це, дуже корисно. Я змінив крок 3 на rvm install ruby-2.1.21.9.3, більше не оновлюється
timelf123

24

Щоб вирішити цю проблему, я повинен був переконатися, що у мене є найновіша версія Рубі та самоцвітів gem update --system; то, я повинен був переконатися , що були встановлені Xcode і інструменти командного рядка: xcode-select --install.


xcode-select --installбуло зроблено, але це для мене це не вирішує
Ade


10

Привіт, це було завдання змусити його працювати на Mac, так що все одно тут є рішення

  1. Встановіть макпорти
  2. Встановити rvm
  3. Перезапустіть термінал
  4. Запустіть rvm requirementsпотім біжітьrvm install 2.1
  5. І останній крок для запуску gem install compass --pre

Я не впевнений, але версія ruby ​​на Mavericks не підтримує вбудовані розширення тощо ... тому якщо ви вказуєте на іншу версію ruby, як, наприклад, "2.1", вона працює чудово.


Я б рекомендував не використовувати макпорти.
nomis

6

Не впевнений, чому жодне з них не позначено як правильну відповідь, але я приземлився сюди через пошук у Google, тому передам те, що знаю ...

Метод @ paul_g був для мене досить близьким, мої кроки на Mac OSx10.9 Retina:

  • Встановіть макпорти
  • Встановіть rvm (стабільний з рубіном, додайте --insecureпрапор для проблем, пов’язаних із SSL) $\curl -sSL --insecure https://get.rvm.io | bash -s stable --ruby
  • Перезапустіть термінал / ресурс свого профілю
  • Запустити rvm requirements --with-gcc=clangВам не доведеться оновлювати Ruby, оскільки ви завантажили останню стабільну версію
  • І останній крок для запуску gem install compass --pre

5

Якщо ви використовуєте Ubuntu, вам слід спробувати встановити істотну збірку

apt install build-essential

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


У мене була така ж проблема. Деякі люди повинні підтримати це.
Сортер

4

Вам може знадобитися встановити інструменти командного рядка Apple, які, ймовірно, не встановлені у вашій системі за замовчуванням. Я отримував таку ж помилку, але перед тим, як дотримуватися будь-якої інструкції тут, я встановив інструменти командного рядка (через непов’язану проблему) і знайшов компас без проблем, коли я спробував ще раз. YMMV.


Це вирішило для мене вищезазначене питання, тому я б сказав, що це прийнятна відповідь на вищезазначене питання.
Пітер Дж. Гаррісон

4

Для того, щоб встановити Compass на Yosemite, вам потрібно створити середовище Ruby та встановити інструменти командного рядка Xcode. Але, найголовніше, після оновлення Xcode обов’язково запустіть програму Xcode та прийміть ліцензійні умови Apple . Він завершить установку компонентів. Після цього ви можете встановити Compass: sudo gem install compass


3

Для macOS 10.14 Mojave переконайтесь, що ви вже встановили інструменти командного рядка через xcode-select --installта запустіть наступну команду, щоб встановити заголовки std.

sudo open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Тепер спробуйте свою команду ще раз.


3

ви повинні мати gcc, json_pure

я збираю інформацію з декількох постів

sudo gem uninstall sass
sudo gem uninstall compass
sudo gem update --system
gem install json_pure   (if you have already have continued to next step)
sudo yum install gcc gcc-c++   (if you have already have continued to next step)
sudo gem install sass

sudo gem install compass

Привіт, якщо ** sudo gem update - система ** не працює, ви отримали помилку в оновлення, то використовуйте

оновлення дорогоцінного каміння sudo --система 2.7.8


Мені також довелося бігати sudo yum install -y redhat-rpm-configза Fedora 24, перш ніж встановлювати компас через цю помилку:gcc: error: /usr/lib/rpm/redhat/redhat-hardened-cc1: No such file or directory
Брайс Гінта

sudo gem update --systemдав мені помилки: ERROR: While executing gem ... (Errno::EPERM) Operation not permitted @ rb_sysopen - System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/gem:(
Ade

2

На йосеміті все, що вам потрібно зробити, - це встановити інструменти командного рядка. тоді це працює.

Навіть якщо інші дорогоцінні камені встановлені прекрасно. Потрібно запустити xcode-select - встановити, щоб компас встановив дорогоцінний камінь.

Удачі.


2

У Mac OS X 10.9, якщо ви спробуєте xcode-select --install, ви отримаєте таку помилку:

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

Рішення полягає в завантаженні інструментів командного рядка (OS X 10.9) безпосередньо з веб-сайту Apple: https://developer.apple.com/downloads/index.action?name=for%20Xcode%20-

Після цього ви зможете встановити останню версію інструментів командного рядка.


2

У ubuntu 14.04 під час виконання apt-get install rubygems є помилка

E: У пакеті "rubygems" немає кандидата на встановлення

виконайте команду вирішити проблеми.

sudo apt-get install gcc ruby-devel rubygems-інтеграція ruby-compass


2

Спробуйте brew install coreutils.

Я зіткнувся з цією проблемою під час відновлення старого проекту sass / compass, який нещодавно був оновлений колегою до рубіну 2.2.5. У проекті використовується rvm та bundler. Це були мої команди

$ rvm install ruby-2.2.5
$ rvm use ruby-2.2.5
$ gem install bundler
$ bundle install

Це призвело до того ffi, що я потрапив у відомі помилки встановлення, про які повідомляється у середовищі StackOverflow:

An error occurred while installing ffi (1.9.14), and Bundler cannot continue.

Більшість пропозицій для вирішення цієї проблеми - це встановлення інструментів командного рядка Xcode. Однак це вже було встановлено в моєму середовищі:

$ xcode-select -p
/Library/Developer/CommandLineTools

Інші пропозиції сказали про встановлення gcc ... тому я спробував:

$ brew install gcc46

Але це також не вдалося через помилку сегментації ... ¯\_(ツ)_/¯ .

Тоді я спробував встановити компас вручну, просто щоб побачити, чи не призведе він до тієї ж ffiпомилки:

$ gem install compass

Але на моє здивування, я отримав зовсім іншу помилку:

make: /usr/local/bin/gmkdir: No such file or directory

Тож я шукав цю проблему і знайшов цю стародавню публікацію в блозі, в якій говорилося про встановлення coreutils:

$ brew install coreutils

Після установки coreutilsз Homebrew, bundler зміг успішно закінчити та встановити компас та залежності.

Кінець.



2

коли

gem встановити overcommit

запускається і ця помилка була розміщена в терміналі.

Failed to build gem native extension

будь ласка, зробіть те саме

xcode-select --install

і це теж виправить


Я отримую xcode-select: error: command line tools are already installed, use "Software Update" to install updates. Це не виправить.
Аде

2

Для Mac OS:

Моєю помилкою було те, що я забув вибрати параметр у XCode - Налаштування - Місцеположення - Інструменти командного рядка після нової установки XCode (у мене було 2 версії, а пізніше я видалив одну). Можливо, це комусь допоможе.

введіть тут опис зображення


1

Спробуйте це, а потім спробуйте встановити компас ще раз

sudo apt install ruby-full

0

У мене була така ж проблема з Linux Mint, але мені вдалося виправити її, видаливши рубін та встановивши його знову.

Видалити рубін:

sudo apt-get remove ruby

Він повідомив про деякі пакети рубіну, такі як:

Package 'ruby' is not installed, so not removed
The following packages were automatically installed and are no longer required:
libruby2.2 ruby-chunky-png ruby-sass rubygems-integration
Use 'apt-get autoremove' to remove them.

Видалення решти пакетів *

apt-get autoremove

Встановіть рубін знову

sudo apt-get install ruby2.2

Встановіть компас

sudo gem install compass

Остання команда була виконана з успіхом.

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