Не удалось собрать собственное расширение 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

Что тут происходит? Как установить последний компас без ошибок?

cusejuice
источник
пожалуйста, убедитесь, что у вас есть make в вашей системе.
Сортировщик

Ответы:

577

Попробуйте это, затем попробуйте установить компас снова

apt-get install ruby-dev
Рутгер ван Барен
источник
33
Это исправляет ошибку в Ubuntu, но кажется, что OP использует OSX.
Мнагаока
1
Фиксированный для меня на Ubuntu 14.04 LTS
thomh
30
Работал на CentOS с "yum install ruby-devel", который является эквивалентом. Спасибо !
B2F
6
Забавно найти решение моей проблемы с Ubuntu в ответе на вопрос OSx. Тем не менее, вы получили мое возражение, так как ваш ответ только что решил мою проблему. Tnx!
e-суши
3
Любая идея, как заставить это работать на Windows? Я установил инструменты разработки Ruby, choco install ruby2.devkitно он все еще не работает
jtate
124

Для того чтобы установить компас В Mac OS X 10.10 (Yosemite) необходимо было выполнить следующее:

1. Настройте среду Ruby

  • Убедитесь, что ruby ​​установлен и обновлен: ruby -v
  • Обновить драгоценные камни sudo gem update --system

2. Настройте среду MAC

Установите инструменты командной строки XCode, это ключ для установки Compass.

xcode-select --install

Установка инструментов командной строки Xcode - ключ к работе Compass на OS X

3. Установите Компас

sudo gem install compass
Нетеру
источник
3
Для меня это был абсолютно правильный ответ, ему нужны инструменты командной строки Xcode
svnm
2
Спасибо, работал для меня, вы правы, инструменты командной строки Xcode являются ключом.
сарком
5
Это сработало для меня с одним дополнением - вам нужно запустить XCODE, чтобы вы могли принять лицензионное соглашение и позволить ему завершить настройку. Может быть стоит отметить ваш ответ.
Бруфорд
Принятие обновления (условия соглашения) через графический интерфейс работал также.
cassioscabral
На недавно обновленном MacBook Pro до Sierra 10.12.6 мне также пришлось запустить «sudo xcodebuild -license», чтобы принять условия и положения, прежде чем запускать sudo gem install compass ....
jocherra
46

Лучший способ - sudo apt-get install ruby-compassустановить компас.

cooljl31
источник
1
Вау, иногда это так просто ^^ пытался установить компас с помощью gem, но некоторые зависимости не были разрешены с помощью gem. С apt-get все работало нормально! Спасибо
naitsirch
38

Вы можете попробовать в Debian с

sudo apt-get install gcc ruby-dev rubygems compass

для Fedora, Centos

yum -y install gcc ruby-devel rubygems compass

Это сработало для меня.

vanduc1102
источник
5
Я также должен был установить make.
cweiske
3
ruby-devсделал трюк stackoverflow.com/questions/20559255/…
Бернхард Доблер
30

Я боролся с вами той же проблемой в течение 3 часов. Начиная с Compass 1.0.alpha19этого требования, для версии 1.9.3 rvm.

Есть несколько несобранных постов, однако, что работало для меня, было следующее:

  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

и это сделало это. Надеюсь, это работает и для вас!

А.А. Трабукко Кампос
источник
У меня недавно была та же проблема, но с более новой версией. Я удалил версию ruby, которую я установил ранее с помощью aptitude, а затем снова установил ее, следуя инструкциям по адресу: rvm.io/rvm/install . С новой версией ruby ​​/ rvm компас построен правильно.
adosaiguas
2
Спасибо за это, очень полезно. Я изменил шаг 3, чтобы rvm install ruby-2.1.21.9.3 больше не обновлялся
timelf123
24

Чтобы решить эту проблему, я должен был убедиться, что у меня самая последняя версия Ruby и гемов gem update --system; то, я должен был убедиться , что были установлены Xcode и инструменты командной строки: xcode-select --install.

BlackHatSamurai
источник
xcode-select --installбыло сделано, но это не решает это для меня
Ade
14

В Mac OS вам необходимо установить эту функцию!

xcode-select --install
user3645907
источник
10

Привет, это было проблемой, чтобы заставить его работать на Mac, так что в любом случае вот решение

  1. Установите macports
  2. Установить рвм
  3. Перезапустить терминал
  4. Беги rvm requirementsбегиrvm install 2.1
  5. И последний шаг, чтобы бежать gem install compass --pre

Я не уверен, но версия ruby ​​на Mavericks не поддерживает собственные расширения и т. Д., Поэтому, если вы укажете на другую версию ruby, как я сделал "2.1", она работает нормально.

paul.g
источник
Я бы порекомендовал не использовать macports.
Ноябрь
6

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

Метод @ paul_g был довольно близок для меня, мои шаги на Mac OSX10.9 Retina:

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

Если вы используете Ubuntu, попробуйте установить build-essential

apt install build-essential

У меня были проблемы с установкой гемов на свежую установку Ubuntu, и это решение сработало для меня.

Adi
источник
У меня такая же проблема. Еще несколько человек должны проголосовать за это.
Сортировщик
4

Вам может понадобиться установить инструменты командной строки Apple, которые, вероятно, не установлены в вашей системе по умолчанию. Я получал ту же ошибку, но перед тем, как следовать какой-либо из приведенных здесь инструкций, я установил инструменты командной строки (из-за не связанной с этим проблемы) и вот-вот установил компас без проблем при повторной попытке. YMMV.

Джон Райан
источник
Это решило вышеупомянутую проблему для меня, поэтому я бы сказал, что это приемлемый ответ на вышеуказанный вопрос.
Питер Дж Харрисон
4

Чтобы установить Compass на Yosemite, вам нужно настроить среду Ruby и установить инструменты командной строки Xcode. Но, самое главное, после обновления Xcode обязательно запустите приложение Xcode и примите условия лицензии Apple . Он завершит установку компонентов. После этого вы можете установить Compass: sudo gem установить compass

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

Обновление самоцвета sudo - система 2.7.8

GSM
источник
Мне также пришлось запускать sudo yum install -y redhat-rpm-configFedora 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

На yosemite все, что вам нужно сделать, это установить инструменты командной строки. тогда это работает.

Даже если другие драгоценные камни установлены нормально. Вы должны запустить xcode-select --install для работы компаса gem install.

Удачи.

A.Sanchez.SD
источник
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-

После этого вы сможете установить последнюю версию инструментов командной строки.

lepix
источник
2

В Ubuntu 14.04 при выполнении команды apt-get install rubygems возникает ошибка

E: Пакет 'rubygems' не имеет кандидата на установку

следуйте командам решить проблемы.

sudo apt-get установить gcc ruby-devel rubygems-интеграция ruby-compass

onebraveman
источник
2

Попробуй brew install coreutils.

Я столкнулся с этой проблемой, перестраивая устаревший проект sass / compass, который недавно был обновлен коллегой до ruby ​​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
  • обновление самоцвета sudo --system
  • sudo gem установить компас
Федерико Бон
источник
2

когда

gem install 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. Это не исправит это.
Ade
2

Для Mac OS:

Моя ошибка была в том, что я забыл выбрать опцию в XCode - «Настройки» - «Местоположения» - «Инструменты командной строки» после новой установки XCode (у меня было 2 версии, а потом я удалил одну). Может быть, это кому-то поможет.

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

Эридана
источник
1

Попробуйте это, затем попробуйте установить компас снова

sudo apt install ruby-full
Pokkhi
источник
0

У меня была та же проблема с Linux Mint, но я смог ее исправить, удалив ruby ​​и установив заново.

Удалить ruby:

sudo apt-get remove ruby

Сообщалось о некоторых пакетах 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

Установите ruby ​​снова

sudo apt-get install ruby2.2

Установить компас

sudo gem install compass

Последняя команда была выполнена с успехом.

claudiu.f.marginean
источник