Falha ao criar extensão nativa gem (instalando o Compass)

275

Quando tento instalar a versão mais recente do compass ( https://rubygems.org/gems/compass/versions/1.0.0.alpha.17 ), recebo o seguinte erro.

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

O que está acontecendo aqui? Como instalo a bússola mais recente sem erros?

cusejuice
fonte
por favor, verifique se você possui o seu sistema.
Classificador

Respostas:

577

Tente isso e tente instalar a bússola novamente

apt-get install ruby-dev
Rutger van Baren
fonte
33
Isso corrige o erro no Ubuntu, mas parece que o OP está usando o OSX.
Mhnagaoka # 8/14
1
Corrigido para mim no Ubuntu 14.04 LTS
thomh
30
Trabalhou no CentOS com "yum install ruby-devel", que é o equivalente. Obrigado !
B2F
6
Engraçado encontrar uma solução para o meu problema do Ubuntu em uma resposta a uma pergunta do OSx. No entanto, você recebeu meu voto positivo, já que sua resposta resolveu meu problema. Tnx!
e-sushi
3
Alguma idéia de como fazer isso funcionar no Windows? Eu instalei as ferramentas dev rubi usando choco install ruby2.devkit, mas ele ainda não está funcionando
jtate
124

Para instalar a bússola No Mac OS X 10.10 (Yosemite), foi necessário o seguinte:

1. Configure o ambiente Ruby

  • Verifique se o ruby ​​está instalado e atualizado: ruby -v
  • Atualizar gemas sudo gem update --system

2. Configure o ambiente MAC

Instale as ferramentas de linha de comando do Xcode, esta é a chave para instalar o Compass.

xcode-select --install

Instalar as ferramentas de linha de comando do Xcode é a chave para fazer o Compass funcionar no OS X

3. Instale o Compass

sudo gem install compass
neteru
fonte
3
Para mim, isso era exatamente a resposta certa, ele precisa as ferramentas de linha de comando do Xcode
svnm
2
Obrigado, trabalhou para mim, você está certo, as ferramentas de linha de comando do Xcode são a chave.
SARCOM
5
Isso funcionou para mim com uma adição: você precisa realmente iniciar o XCODE para poder aceitar o contrato de licença e deixá-lo concluir a instalação. Pode valer a pena marcar na sua resposta.
Bruford
Aceitar a atualização (termos do contrato) por meio da GUI também funcionou.
cassioscabral 25/09
Em um MacBook Pro recentemente actualizado para Sierra 10.12.6, eu também tinha que executar "sudo xcodebuild -license" para aceitar os termos e condições, antes de executar sudo gem install bússola ....
jocherra
46

A melhor maneira é sudo apt-get install ruby-compassinstalar a bússola.

cooljl31
fonte
1
Uau, às vezes é tão fácil ^^ tentar instalar a bússola com gem, mas havia algumas dependências não resolvidas pela gem. Com o apt-get funcionou bem! Obrigado
naitsirch 16/09/2015
38

Você pode tentar no Debian com

sudo apt-get install gcc ruby-dev rubygems compass

para o Fedora, Centos

yum -y install gcc ruby-devel rubygems compass

Funcionou para mim.

vanduc1102
fonte
5
Eu também tive que instalar make.
Cwiske
3
ruby-devfez o truque stackoverflow.com/questions/20559255/…
Bernhard Döbler 11/11
30

Eu lutei com você mesmo problema por cerca de 3 horas. A partir de Compass 1.0.alpha19, o requisito é para a versão 1.9.3 do rvm.

Existem várias postagens não coletadas, no entanto, o que funcionou para mim foi o seguinte:

  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 fez isso. Espero que funcione para você também!

AA Trabucco Campos
fonte
Recentemente, tive o mesmo problema, mas com uma versão mais recente. O que fiz foi desinstalar a versão ruby ​​que instalei anteriormente com o aptitude e depois instalei-a novamente seguindo as instruções em: rvm.io/rvm/install . Com a nova versão ruby ​​/ rvm, a bússola foi construída corretamente.
Adosaiguas
2
Obrigado por isso, muito útil. Eu mudei a etapa 3 para rvm install ruby-2.1.2a 1.9.3 não está mais sendo atualizados
timelf123
24

Para que eu resolvesse esse problema, tinha que ter certeza de que tinha a versão mais atual do Ruby e das gemas gem update --system; então, eu tinha que ter certeza de que o Xcode e as ferramentas de linha de comando foram instalados: xcode-select --install.

BlackHatSamurai
fonte
xcode-select --installfoi feito, mas isso não resolve isso por mim
Ade
14

No Mac OS, você precisa instalar esse recurso!

xcode-select --install
user3645907
fonte
10

Olá, foi um desafio fazê-lo funcionar no Mac. De qualquer forma, aqui está uma solução

  1. Instalar macports
  2. Instalar rvm
  3. Reiniciar terminal
  4. Corra rvm requirementse corrarvm install 2.1
  5. E o último passo para correr gem install compass --pre

Não tenho certeza, mas a versão ruby ​​no Mavericks não suporta extensões nativas, etc.

paul.g
fonte
Eu recomendaria não usar macports.
Nomis
6

Não sei por que nenhum deles está marcado como a resposta correta, mas cheguei aqui por meio de uma pesquisa no google, então transmitirei o que sei ...

O método do @ paul_g estava bem próximo de mim, meus passos em um Mac osx10.9 Retina:

  • Instalar macports
  • Instale o rvm (estável com ruby ​​add --insecureflag para questões relacionadas ao SSL)\curl -sSL --insecure https://get.rvm.io | bash -s stable --ruby
  • Reinicie o Terminal / Recurso seu perfil
  • Executar rvm requirements --with-gcc=clangNão é necessário atualizar o Ruby porque você baixou a última versão estável
  • E o último passo para correr gem install compass --pre
tbremer
fonte
5

Se você estiver usando o Ubuntu, tente instalar o build-essential

apt install build-essential

Eu tive problemas com a instalação de gemas na instalação nova do ubuntu, e esta solução funcionou para mim.

Adi
fonte
Eu tive o mesmo problema. Mais algumas pessoas deveriam votar isso.
Classificador
4

Pode ser necessário instalar o Command Line Tools da Apple, que provavelmente não está instalado no seu sistema por padrão. Eu estava recebendo o mesmo erro, mas antes de seguir qualquer uma das instruções aqui, instalei o Command Line Tools (devido a um problema não relacionado) e eis que a bússola foi instalada sem problemas ao tentar novamente. YMMV.

John Ryan
fonte
Isso resolveu o problema acima para mim, então eu diria que essa é uma resposta aceitável para a pergunta acima.
Peter J Harrison
4

Para instalar o Compass no Yosemite, você precisa configurar o ambiente Ruby e instalar o Xcode Command Line Tools. Porém, o mais importante, após atualizar o Xcode, inicie o aplicativo Xcode e aceite os termos de licença da Apple . Concluirá a instalação dos componentes. Depois disso, você pode instalar o Compass: sudo gem install compass

Gratz
fonte
3

Para o macOS 10.14 Mojave, verifique se você já instalou as ferramentas de linha de comando xcode-select --installe execute o seguinte comando para instalar os cabeçalhos std.

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

Agora tente seu comando novamente.

Vincent Sit
fonte
3

você deve ter gcc, json_pure

coleciono algumas informações de vários posts

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

Olá, se ** sudo gem update --system ** não estiver funcionando, você recebeu um erro na atualização e use

atualização sudo gem --system 2.7.8

gsm
fonte
Eu também tive que correr sudo yum install -y redhat-rpm-configpara o Fedora 24 antes de instalar a bússola devido a este erro:gcc: error: /usr/lib/rpm/redhat/redhat-hardened-cc1: No such file or directory
Bryce Guinta 04/04
sudo gem update --systemdeu-me erros: ERROR: While executing gem ... (Errno::EPERM) Operation not permitted @ rb_sysopen - System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/gem:(
Ade
2

No yosemite, tudo que você deve fazer é instalar as ferramentas de linha de comando. então funciona.

Mesmo se outras gemas instaladas bem. Você deve executar o xcode-select --install para que o gem install compass funcione.

Boa sorte.

A.Sanchez.SD
fonte
2

No Mac OS X 10.9, se você tentar xcode-select --install, receberá o seguinte erro:

Não é possível instalar o software porque não está disponível no momento no servidor de Atualização de Software.

A solução é baixar o Command Line Tools (OS X 10.9) diretamente do site da Apple: https://developer.apple.com/downloads/index.action?name=for%20Xcode%20-

Você poderá instalar a última versão do Command Line Tools.

lepix
fonte
2

No ubuntu 14.04, ao executar o apt-get install rubygems , há um erro

E: O pacote 'rubygems' não possui candidato à instalação

O comando follow resolve os problemas.

sudo apt-get install gcc ruby-desenvolvimento rubygems-integração ruby-compass

onebraveman
fonte
2

Tente brew install coreutils.

Eu encontrei esse problema ao reconstruir um projeto antigo de sass / compass que foi recentemente atualizado para o ruby ​​2.2.5 por um colega. O projeto usa rvm e bundler. Esses foram meus comandos

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

Isso me levou a atingir os famosos ffierros de instalação, relatados no ambiente StackOverflow:

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

A maioria das sugestões para resolver esse problema é instalar as ferramentas de linha de comando do Xcode. No entanto, isso já foi instalado no meu ambiente:

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

Outras sugestões para instalar o gcc ... então tentei:

$ brew install gcc46

Mas isso também falhou devido a uma falha de segmentação ... ¯\_(ツ)_/¯.

Então, tentei instalar a bússola manualmente, apenas para ver se daria o mesmo ffierro:

$ gem install compass

Mas, para minha surpresa, recebi um erro totalmente diferente:

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

Então, procurei esse problema e encontrei este post antigo que dizia instalar o coreutils:

$ brew install coreutils

Após a instalação coreutilscom o Homebrew, o bundler conseguiu finalizar e instalar a bússola e as dependências com êxito.

O fim.

JamesWilson
fonte
2
  • atualização sudo gem --system
  • sudo gem instalar bússola
Federico Bohn
fonte
2

quando

supercommit instalação gem

é executado também este erro foi colocado no terminal.

Failed to build gem native extension

por favor faça o mesmo

xcode-select --install

e vai resolver esse problema também

Anja Ishmukhametova
fonte
Eu entendo xcode-select: error: command line tools are already installed, use "Software Update" to install updates. Isso não corrige.
Ade
2

Para Mac OS:

Meu erro foi que eu esqueci de selecionar a opção no XCode - Preferences - Locations - Command Line Tools após a nova instalação do XCode (eu tinha 2 versões e depois apaguei uma). Talvez isso ajude alguém.

insira a descrição da imagem aqui

Eridana
fonte
1

Tente isso e tente instalar a bússola novamente

sudo apt install ruby-full
Pokkhi
fonte
0

Eu tive o mesmo problema no Linux Mint, mas consegui corrigi-lo desinstalando o ruby ​​e instalando-o novamente.

Desinstale o ruby:

sudo apt-get remove ruby

Ele relatou alguns pacotes ruby ​​como:

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.

Desinstale os pacotes restantes *

apt-get autoremove

Instale o ruby ​​novamente

sudo apt-get install ruby2.2

Instalar bússola

sudo gem install compass

O último comando foi executado com sucesso.

claudiu.f.marginean
fonte