Impossibile creare l'estensione nativa gemma (installazione di Compass)


275

Quando provo ad installare l'ultima versione di compass ( https://rubygems.org/gems/compass/versions/1.0.0.alpha.17 ), ottengo il seguente errore.

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

Cosa sta succedendo qui? Come posso installare l'ultima bussola senza errori?



per favore assicurati di aver fatto il tuo sistema.
Sorter

Risposte:


577

Prova questo, quindi prova a installare di nuovo la bussola

apt-get install ruby-dev

33
Questo risolve l'errore su Ubuntu, ma sembra che OP stia usando OSX.
mhnagaoka,

1
Risolto per me su Ubuntu 14.04 LTS
dal

30
Ha lavorato su CentOS con "yum install ruby-devel" che è l'equivalente. Grazie !
B2F

6
Divertente trovare una soluzione al mio problema Ubuntu in una risposta a una domanda OSx. Tuttavia, hai ottenuto il mio voto poiché la tua risposta ha appena risolto il mio problema. Tnx!
e-sushi,

3
Qualche idea su come farlo funzionare su Windows? Ho installato gli strumenti di sviluppo di Ruby usando choco install ruby2.devkitma non funziona ancora
jtate

124

Per installare la bussola su Mac OS X 10.10 (Yosemite) è stato necessario eseguire le seguenti operazioni:

1. Configurare l'ambiente Ruby

  • Assicurarsi che ruby ​​sia installato e aggiornato: ruby -v
  • Aggiorna gemma sudo gem update --system

2. Configurare l'ambiente MAC

Installa Xcode Command Line Tools questa è la chiave per installare Compass.

xcode-select --install

L'installazione degli strumenti da riga di comando Xcode è la chiave per far funzionare Compass su OS X.

3. Installa bussola

sudo gem install compass

3
Per me questa era esattamente la risposta giusta, ha bisogno degli strumenti della riga di comando Xcode
svnm,

2
Grazie, ha funzionato per me, hai ragione, gli strumenti della riga di comando Xcode sono la chiave.
sarcom,

5
Questo ha funzionato per me con un'aggiunta: devi effettivamente avviare XCODE in modo da poter accettare il contratto di licenza e terminare l'installazione. Potrebbe valere la pena taggarlo sulla tua risposta.
Bruford,

Anche l'accettazione dell'aggiornamento (termini dell'accordo) tramite la GUI ha funzionato.
cassioscabral,

Su un MacBook Pro recentemente aggiornato a Sierra 10.12.6, ho anche dovuto eseguire "sudo xcodebuild -license" per accettare i termini e le condizioni, prima di eseguire sudo gem install compass compass ....
jocherra

46

Il modo migliore è sudo apt-get install ruby-compassinstallare la bussola.


1
Caspita, a volte è così facile ^^ provato a installare la bussola con gemma, ma c'erano alcune dipendenze non risolte da gemma. Con apt-get ha funzionato bene! Grazie
naitsirch,


30

Ho lottato con te stesso problema per circa 3 ore. A partire da Compass 1.0.alpha19, il requisito è per la versione rvm 1.9.3.

Esistono diversi post non raccolti, tuttavia ciò che ha funzionato per me è stato il seguente:

  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

e quello lo ha fatto. Spero che funzioni anche per te!


Di recente ho avuto lo stesso problema ma con una versione più recente. Quello che ho fatto è stato disinstallare la versione ruby ​​che ho installato in precedenza con aptitude e poi l'ho installata di nuovo seguendo le istruzioni su: rvm.io/rvm/install . Con la nuova bussola versione rubino / rvm costruita correttamente.
adosaiguas,

2
Grazie per questo, molto utile. Ho cambiato il passaggio 3 in rvm install ruby-2.1.21.9.3 non viene più aggiornato
timelf123

24

Per risolvere questo problema, ho dovuto assicurarmi di avere la versione più recente di Ruby e le gemme gem update --system; poi, ho dovuto fare in modo che Xcode e gli strumenti della riga di comando sono stati installati: xcode-select --install.


xcode-select --installè stato fatto ma questo non lo risolve per me
Ade,

14

Su Mac OS devi installare questa funzione!

xcode-select --install

10

Ciao, è stata una sfida farlo funzionare su Mac, quindi ecco una soluzione

  1. Installa macport
  2. Installa rvm
  3. Riavvia terminale
  4. Esegui rvm requirementsquindi corrirvm install 2.1
  5. E l'ultimo passo per correre gem install compass --pre

Non sono sicuro ma la versione ruby ​​su Mavericks non supporta le estensioni native ecc ... quindi se punti ad un'altra versione ruby ​​come ho fatto con "2.1", funziona bene.


Consiglierei di non usare macports.
nomis

6

Non sono sicuro del perché nessuno di questi sia contrassegnato come la risposta corretta, ma sono arrivato qui attraverso una ricerca su Google, quindi passerò quello che so ...

Il metodo di @ paul_g era abbastanza vicino per me, i miei passi su un Mac osx10.9 Retina:

  • Installa macport
  • Installa rvm (stabile con ruby ​​aggiungi --insecureflag per problemi relativi a SSL) $\curl -sSL --insecure https://get.rvm.io | bash -s stable --ruby
  • Riavvia Terminale / Risorsa il tuo profilo
  • Esegui rvm requirements --with-gcc=clangNon dovrai aggiornare Ruby perché hai scaricato l'ultima versione stabile
  • E l'ultimo passo per correre gem install compass --pre

5

Se stai usando Ubuntu, dovresti provare a installare build-essential

apt install build-essential

Ho avuto problemi con l'installazione di gemme su una nuova installazione di Ubuntu e questa soluzione ha funzionato per me.


Ho avuto lo stesso problema. Altre persone dovrebbero votare questo.
Sorter

4

Potrebbe essere necessario installare gli strumenti da riga di comando di Apple, che probabilmente non sono installati sul sistema per impostazione predefinita. Stavo ottenendo lo stesso errore, ma prima di seguire una qualsiasi delle istruzioni qui ho installato gli Strumenti da riga di comando (a causa di un problema non correlato) e vedo bussola installata senza problemi quando ho provato di nuovo. YMMV.


Ciò ha risolto il problema di cui sopra per me, quindi direi che questa è una risposta accettabile alla domanda di cui sopra.
Peter J Harrison,

4

Per installare Compass su Yosemite è necessario configurare l'ambiente Ruby e installare Xcode Command Line Tools. Ma, cosa più importante, dopo aver aggiornato Xcode, assicurati di avviare l'applicazione Xcode e accettare i termini della licenza Apple . Completerà l'installazione dei componenti. Successivamente, è possibile installare Compass: sudo gem install compass


3

Per macOS 10.14 Mojave, assicurati di aver già installato gli strumenti da riga di comando xcode-select --installe di eseguire il comando seguente per installare le intestazioni std.

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

Ora prova di nuovo il tuo comando.


3

devi avere gcc, json_pure

raccolgo alcune informazioni da diversi post

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

Ciao se ** sudo gem update --system ** non funziona hai ricevuto un errore nell'aggiornamento quindi usa

aggiornamento sudo gem --system 2.7.8


Ho anche dovuto correre sudo yum install -y redhat-rpm-configper Fedora 24 prima di installare la bussola a causa di questo errore:gcc: error: /usr/lib/rpm/redhat/redhat-hardened-cc1: No such file or directory
Bryce Guinta

sudo gem update --systemmi ha dato errori: ERROR: While executing gem ... (Errno::EPERM) Operation not permitted @ rb_sysopen - System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/gem:(
Ade

2

Su yosemite, tutto ciò che devi fare è installare gli strumenti da riga di comando. allora funziona.

Anche se altre gemme installate bene. È necessario eseguire xcode-select --install per far funzionare gemma install compass.

In bocca al lupo.


2

Su Mac OS X 10.9, se ci provi xcode-select --install, otterrai il seguente errore:

Impossibile installare il software perché non è attualmente disponibile dal server di aggiornamento software.

La soluzione è scaricare Command Line Tools (OS X 10.9) direttamente dal sito Web Apple: https://developer.apple.com/downloads/index.action?name=for%20Xcode%20-

Sarai quindi in grado di installare l'ultima versione di Command Line Tools.


2

In Ubuntu 14.04, mentre esegui apt-get install rubygems , c'è un errore

E: Il pacchetto 'rubygems' non ha candidati all'installazione

Segui il comando per risolvere i problemi.

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


2

Prova brew install coreutils.

Ho riscontrato questo problema durante la ricostruzione di un vecchio progetto bussola / bussola che è stato recentemente aggiornato a un ruby ​​2.2.5 da un collega. Il progetto utilizza rvm e bundler. Questi erano i miei comandi

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

Questo mi ha fatto colpire i famosi ffierrori di installazione, riportati nell'ambiente StackOverflow:

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

La maggior parte dei suggerimenti per risolvere questo problema è installare gli strumenti della riga di comando Xcode. Tuttavia, questo era già installato nel mio ambiente:

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

Altri suggerimenti per installare gcc ... quindi ho provato:

$ brew install gcc46

Ma anche questo non è riuscito a causa di un errore di segmentazione ... ¯\_(ツ)_/¯.

Quindi, ho provato a installare la bussola a mano, solo per vedere se avrebbe dato lo stesso ffierrore:

$ gem install compass

Ma con mia sorpresa, ho avuto un errore completamente diverso:

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

Quindi ho cercato quel problema e ho trovato questo antico post sul blog che diceva di installare coreutils:

$ brew install coreutils

Dopo l'installazione coreutilscon Homebrew, il bundler è stato in grado di completare e installare correttamente bussola e dipendenze.

La fine.



2

quando

installazione gemma overcommit

viene eseguito anche questo errore è stato inserito nel terminale.

Failed to build gem native extension

per favore, fai lo stesso

xcode-select --install

e risolverà anche questo problema


Ho capito xcode-select: error: command line tools are already installed, use "Software Update" to install updates. Questo non lo risolve.
Ade,

2

Per Mac OS:

Il mio errore è che ho dimenticato di selezionare l'opzione in XCode - Preferenze - Posizioni - Strumenti da riga di comando dopo la nuova installazione di XCode (avevo 2 versioni e successivamente ne ho cancellata una). Forse aiuterà qualcuno.

inserisci qui la descrizione dell'immagine


1

Prova questo, quindi prova a installare di nuovo la bussola

sudo apt install ruby-full

0

Ho avuto lo stesso problema su Linux Mint ma sono stato in grado di risolverlo disinstallando Ruby e installandolo di nuovo.

Disinstallare ruby:

sudo apt-get remove ruby

Ha riportato alcuni pacchetti di rubini come:

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.

Disinstalla i pacchetti rimanenti *

apt-get autoremove

Installa di nuovo ruby

sudo apt-get install ruby2.2

Installa bussola

sudo gem install compass

L'ultimo comando è stato eseguito con successo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.