Nie udało się zbudować natywnego rozszerzenia gem (instalacja Compass)

275

Kiedy próbuję zainstalować najnowszą wersję kompasu ( https://rubygems.org/gems/compass/versions/1.0.0.alpha.17 ), pojawia się następujący błąd.

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

Co tu się dzieje? Jak zainstalować najnowszy kompas bez błędów?

sok owocowy
źródło
upewnij się, że masz w swoim systemie.
Sorter

Odpowiedzi:

577

Spróbuj tego, a następnie spróbuj ponownie zainstalować kompas

apt-get install ruby-dev
Rutger van Baren
źródło
33
To naprawia błąd w Ubuntu, ale wygląda na to, że OP używa OSX.
mhnagaoka
1
Naprawiono dla mnie Ubuntu 14.04 LTS
thomh
30
Pracował na CentOS z „yum install ruby-devel”, który jest odpowiednikiem. Dzięki !
B2F
6
Zabawne jest znalezienie rozwiązania mojego problemu z Ubuntu w odpowiedzi na pytanie dotyczące OSx. Niemniej jednak masz moje poparcie, ponieważ twoja odpowiedź właśnie rozwiązała mój problem. Tnx!
e-sushi
3
Masz pomysł, jak to zrobić, aby działało w systemie Windows? Zainstalowałem narzędzia choco install ruby2.devkit
deweloperskie
124

Aby zainstalować kompas Na Mac OS X 10.10 (Yosemite) musiał wykonać następujące czynności:

1. Skonfiguruj środowisko Ruby

  • Upewnij się, że Ruby jest zainstalowany i aktualny: ruby -v
  • Zaktualizuj klejnoty sudo gem update --system

2. Skonfiguruj środowisko MAC

Zainstaluj narzędzia wiersza polecenia Xcode. Jest to klucz do zainstalowania kompasu.

xcode-select --install

Instalowanie narzędzi wiersza polecenia Xcode jest kluczem do uruchomienia Compass w systemie OS X

3. Zainstaluj kompas

sudo gem install compass
neteru
źródło
3
Dla mnie to była właściwa odpowiedź, potrzebuje narzędzi wiersza poleceń Xcode
svnm
2
Dzięki, pracowałeś dla mnie, masz rację, Narzędzia wiersza poleceń Xcode są kluczem.
sarcom
5
Działa to dla mnie z jednym dodatkiem - musisz faktycznie uruchomić XCODE, aby zaakceptować umowę licencyjną i pozwolić jej zakończyć konfigurację. Być może warto oznaczyć swoją odpowiedź.
Bruford,
Akceptacja aktualizacji (warunki umowy) za pośrednictwem GUI również działała.
cassioscabral
Na niedawno zaktualizowanym MacBooku Pro do Sierra 10.12.6 musiałem również uruchomić „sudo xcodebuild -license”, aby zaakceptować warunki, zanim uruchomię sudo gem install compass ....
jocherra
46

Najlepszym sposobem jest sudo apt-get install ruby-compasszainstalowanie kompasu.

cooljl31
źródło
1
Wow, czasem tak łatwo ^^ próbował zainstalować kompas z gemem, ale były pewne zależności, które nie zostały rozwiązane przez gem. Z apt-get działało dobrze! Dzięki
naitsirch,
38

Możesz spróbować w Debianie

sudo apt-get install gcc ruby-dev rubygems compass

dla Fedory, Centos

yum -y install gcc ruby-devel rubygems compass

To zadziałało dla mnie.

vanduc1102
źródło
5
Musiałem także zainstalować make.
cweiske
3
ruby-devzrobił trick stackoverflow.com/questions/20559255/…
Bernhard Döbler
30

Walczyłem z tobą ten sam problem przez około 3 godziny. Na dzień Compass 1.0.alpha19dzisiejszy wymaganie dotyczy wersji 1.9.3 rvm.

Istnieje kilka niepobranych wpisów, jednak dla mnie zadziałało:

  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

i to zrobiło. Mam nadzieję, że to również dla ciebie działa!

AA Trabucco Campos
źródło
Ostatnio miałem ten sam problem, ale z nowszą wersją. Zrobiłem to, aby odinstalować wersję Ruby, którą wcześniej zainstalowałem z aptitude, a następnie zainstalowałem ponownie, postępując zgodnie z instrukcjami pod adresem: rvm.io/rvm/install . Dzięki nowej poprawnie zbudowanej nowej wersji kompasu ruby ​​/ rvm.
adosaiguas
2
Dzięki za to bardzo pomocny. Zmieniłem krok 3 na, rvm install ruby-2.1.2ponieważ 1.9.3 nie jest już aktualizowany
timelf123
24

Aby rozwiązać ten problem, musiałem upewnić się, że mam najnowszą wersję Ruby i klejnotów gem update --system; Następnie musiałem się upewnić, że Xcode i narzędzia wiersza poleceń zostały zainstalowane: xcode-select --install.

BlackHatSamurai
źródło
xcode-select --installzostało zrobione, ale to mi nie rozwiązuje
Ade
14

W systemie Mac OS musisz zainstalować tę funkcję!

xcode-select --install
użytkownik3645907
źródło
10

Cześć, wyzwaniem było uruchomienie go na komputerze Mac, więc i tak jest to rozwiązanie

  1. Zainstaluj Macports
  2. Zainstaluj rvm
  3. Uruchom ponownie terminal
  4. Uruchom, rvm requirementsa następnie uruchomrvm install 2.1
  5. I ostatni krok do uruchomienia gem install compass --pre

Nie jestem pewien, ale wersja Ruby na Mavericks nie obsługuje rozszerzeń natywnych itp., Więc jeśli wskażesz inną wersję Ruby, tak jak zrobiłem „2.1”, działa dobrze.

paul.g
źródło
Polecam nie używać Macports.
nomis
6

Nie jestem pewien, dlaczego żadne z nich nie jest oznaczone jako poprawna odpowiedź, ale wylądowałem tutaj za pomocą wyszukiwarki Google, więc przekażę to, co wiem ...

Metoda @ paul_g była dla mnie dość bliska, moje kroki na Mac OSx10.9 Retina:

  • Zainstaluj Macports
  • Zainstaluj rvm (stabilny z dodatkiem ruby) --insecure flagą dla problemów związanych z SSL) $\curl -sSL --insecure https://get.rvm.io | bash -s stable --ruby
  • Uruchom ponownie terminal / zasób swój profil
  • Biegać rvm requirements --with-gcc=clang Nie będziesz musiał aktualizować Ruby, ponieważ pobrałeś ostatnią stabilną wersję
  • I ostatni krok do uruchomienia gem install compass --pre
tbremer
źródło
5

Jeśli używasz Ubuntu, powinieneś spróbować zainstalować niezbędną do kompilacji

apt install build-essential

Miałem problemy z instalacją klejnotów przy nowej instalacji Ubuntu, a to rozwiązanie zadziałało dla mnie.

Adi
źródło
Miałem ten sam problem. Więcej osób powinno to poprzeć.
Sorter
4

Może być konieczne zainstalowanie narzędzi wiersza polecenia Apple, które prawdopodobnie nie są domyślnie instalowane w systemie. Otrzymywałem ten sam błąd, ale przed wykonaniem którejkolwiek z instrukcji tutaj zainstalowałem Narzędzia wiersza poleceń (z powodu niezwiązanego problemu) i po ponownej próbie zainstalowałem bez problemu kompas. YMMV.

John Ryan
źródło
To rozwiązało dla mnie powyższy problem, więc powiedziałbym, że jest to akceptowalna odpowiedź na powyższe pytanie.
Peter J Harrison
4

Aby zainstalować Compass na Yosemite, musisz skonfigurować środowisko Ruby i zainstalować narzędzia wiersza poleceń Xcode. Ale najważniejsze, po aktualizacji Xcode, należy uruchomić aplikację Xcode i zaakceptować warunki licencji Apple . To zakończy instalację komponentów. Następnie możesz zainstalować kompas: sudo gem install compass

Gratz
źródło
3

W systemie macOS 10.14 Mojave upewnij się, że masz już zainstalowane narzędzia wiersza polecenia xcode-select --installi uruchom następujące polecenie, aby zainstalować nagłówki standardowe.

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

Teraz spróbuj ponownie wykonać polecenie.

Vincent Sit
źródło
3

musisz mieć gcc, json_pure

zbieram informacje z kilku postów

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

Cześć, jeśli ** aktualizacja klejnotu sudo - system ** nie działa, masz błąd w aktualizacji, a następnie użyj

aktualizacja klejnotów sudo - system 2.7.8

gsm
źródło
Musiałem również uruchomić sudo yum install -y redhat-rpm-configFedorę 24 przed zainstalowaniem kompasu z powodu tego błędu:gcc: error: /usr/lib/rpm/redhat/redhat-hardened-cc1: No such file or directory
Bryce Guinta
sudo gem update --systemdał mi błędy: ERROR: While executing gem ... (Errno::EPERM) Operation not permitted @ rb_sysopen - System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/gem:(
Ade
2

W yosemite wystarczy zainstalować narzędzia wiersza poleceń. to działa.

Nawet jeśli inne klejnoty zostały zainstalowane poprawnie. Musisz uruchomić xcode-select --install, aby kompas do instalacji klejnotów działał.

Powodzenia.

A.Sanchez.SD
źródło
2

Jeśli spróbujesz w systemie Mac OS X 10.9, xcode-select --installpojawi się następujący błąd:

Nie można zainstalować oprogramowania, ponieważ nie jest ono obecnie dostępne z serwera aktualizacji oprogramowania.

Rozwiązaniem jest pobranie narzędzi wiersza polecenia (OS X 10.9) bezpośrednio ze strony Apple: https://developer.apple.com/downloads/index.action?name=for%20Xcode%20-

Będziesz wtedy mógł zainstalować ostatnią wersję narzędzi wiersza poleceń.

lepix
źródło
2

W Ubuntu 14.04 podczas wykonywania programów instalacyjnych apt-get Rubygems występuje błąd

E: Pakiet „rubygems” nie ma kandydata do instalacji

wykonaj polecenie, aby rozwiązać problemy.

sudo apt-get install gcc ruby-devel rubygems -integration ruby-compass

onebraveman
źródło
2

Próbować brew install coreutils .

Natrafiłem na ten problem podczas przebudowy starzejącego się projektu sass / kompas, który został niedawno zaktualizowany do Ruby 2.2.5 przez kolegę. Projekt wykorzystuje rvm i bundler. To były moje polecenia

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

To spowodowało, że trafiłem na znane ffibłędy instalacyjne, które są zgłaszane w środowisku StackOverflow:

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

Większość sugestii dotyczących rozwiązania tego problemu dotyczy instalacji narzędzi wiersza polecenia Xcode. Jednak zostało to już zainstalowane w moim środowisku:

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

Inne sugestie dotyczące instalacji gcc ... więc próbowałem:

$ brew install gcc46

Ale to również nie z powodu usterki segmentacji ... ¯\_(ツ)_/¯.

Próbowałem więc ręcznie zainstalować kompas, aby sprawdzić, czy spowoduje to ten sam ffibłąd:

$ gem install compass

Ale ku mojemu zaskoczeniu dostałem zupełnie inny błąd:

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

Poszukałem więc tego problemu i znalazłem ten starożytny post na blogu, który mówi o instalacji coreutils:

$ brew install coreutils

Po zainstalowaniu coreutilsz Homebrew firma pakująca była w stanie zakończyć i pomyślnie zainstalować kompas i zależności.

Koniec.

JamesWilson
źródło
2
  • aktualizacja klejnotów sudo - system
  • sudo gem install kompas
Federico Bohn
źródło
2

kiedy

overcommit instalacji klejnotów

uruchamiany jest również ten błąd został umieszczony w terminalu.

Failed to build gem native extension

proszę zrób to samo

xcode-select --install

i to również naprawi ten problem

Anja Ishmukhametova
źródło
I dostać xcode-select: error: command line tools are already installed, use "Software Update" to install updates. To nie naprawia tego.
Ade
2

W systemie Mac OS:

Mój błąd polegał na tym, że zapomniałem wybrać opcję w XCode - Preferencje - Lokalizacje - Narzędzia wiersza poleceń po nowej instalacji XCode (miałem 2 wersje, a później jedną usunąłem). Może to komuś pomoże.

wprowadź opis zdjęcia tutaj

Eridana
źródło
1

Spróbuj tego, a następnie spróbuj ponownie zainstalować kompas

sudo apt install ruby-full
Pokkhi
źródło
0

Miałem ten sam problem na Linux Mint, ale udało mi się go naprawić, odinstalowując Ruby i instalując go ponownie.

Odinstaluj Ruby:

sudo apt-get remove ruby

Zgłoszono niektóre pakiety ruby, takie jak:

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.

Odinstaluj pozostałe pakiety *

apt-get autoremove

Zainstaluj ponownie ruby

sudo apt-get install ruby2.2

Zainstaluj kompas

sudo gem install compass

Ostatnie polecenie zostało wykonane pomyślnie.

claudiu.f.marginean
źródło