Erro ao instalar o json gem 'mkmf.rb não consegue encontrar os arquivos de cabeçalho do ruby'

407

Por contexto, ele em um servidor remoto que possui um firewall. Estou configurando meu ambiente por meio de um proxy. Eu tenho ruby 1.8.7. Quando tento instalar gem ..

sudo gem install --http-proxy <host address>:<port> json

Estou tendo o erro a seguir:

Building native extensions.  This could take a while...
ERROR:  Error installing json:
        ERROR: Failed to build gem native extension.

/usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/ruby.h

Gem files will remain installed in /usr/lib64/ruby/gems/1.8/gems/json-1.8.1 for inspection.
Results logged to /usr/lib64/ruby/gems/1.8/gems/json-1.8.1/ext/json/ext/generator/gem_make.out

Como não tinha certeza do problema, pesquisei no Google e encontrei essas

Alguma dica? Obrigado!

Navneet
fonte
verifique a presença do /usr/lib/ruby/ruby.harquivo, se houver, mostre a mensagem de erro de gem_make.out.
Малъ Скрылевъ

Respostas:

786

Atualização da era moderna, conforme declarado mimoralea :

Caso você esteja usando ruby ​​2.0 ou 2.2 (obrigado @ patrick-davey).

sudo apt-get install ruby2.0-dev
sudo apt-get install ruby2.2-dev
sudo apt-get install ruby2.3-dev

ou, maneira genérica:

sudo apt-get install ruby-dev

ou

sudo apt-get install ruby`ruby -e 'puts RUBY_VERSION[/\d+\.\d+/]'`-dev

O primeiro link que você postou é exatamente o seu caso: não há um ambiente de desenvolvimento ruby ​​instalado. O ambiente de desenvolvimento é necessário para compilar extensões ruby, que são escritas principalmente emC . O proxy não tem nada a ver com o problema: tudo é baixado corretamente, apenas a compilação falha.

Eu sugiro que você instale ruby-dev( ruby-develpara distribuições baseadas em rpm) no seu computador de destino.

gcc pacote também pode ser necessário.

Tentar:

$ sudo apt-get install ruby-dev

Ou, para a distribuição Redhat:

$ sudo yum install ruby-devel

Ou, para o SuSE [aberto]:

$ sudo zypper install ruby-devel
Aleksei Matiushkin
fonte
2
Obrigado! Eu quis dizer que a resposta nessa pergunta parecia específica do módulo. Eu acho que em vez de ruby-devseu ruby-devel. Aqui é onde eu encontrei o que eu exatamente necessário - digitalocean.com/community/articles/...
Navneet
9
Após instalar o ruby-devel (no Fedora 20), recebi o erro *** extconf.rb falhou ***. Depois de instalar o gcc, como você sugeriu, tudo funcionou bem.
Wayne Riesterer
Você pode adicionar sudo zypper install ruby-develpara o openSUSE
superbob 9/16
Isso não faz nada no Ubuntu. O pacote ausente é ruby2.2-dev(ou qualquer versão que você instalou).
Luís de Sousa
2
Não, essa resposta não ajudou em nada. A resposta certa é a de mimoralea .
Luís de Sousa
177

Para o Xcode 11 no macOS 10.14 , isso pode acontecer mesmo após a instalação do Xcode e da instalação de ferramentas de linha de comando e da aceitação da licença com

sudo xcode-select --install
sudo xcodebuild -license accept

O problema é que o Xcode 11 envia o SDK do macOS 10.15, que inclui cabeçalhos para o ruby2.6, mas não para o ruby2.3 do macOS 10.14. Você pode verificar se esse é o seu problema executando

ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

que no macOS 10.14 com Xcode 11 imprime o caminho inexistente

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0

No entanto, o Xcode 11 instala um macOS 10.14 SDK dentro /Library/Developer/CommandLineTools/SDKs/MacOS10.14.sdk. Não é necessário poluir os diretórios do sistema instalando os arquivos de cabeçalho antigos, conforme sugerido em outras respostas. Em vez disso, selecionando esse SDK, os cabeçalhos ruby2.3 apropriados serão encontrados:

sudo xcode-select --switch /Library/Developer/CommandLineTools
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

Agora, isso deve ser impresso corretamente

/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0

Da mesma forma, gem installdeve funcionar enquanto esse SDK estiver selecionado.

Para voltar ao Xcode SDK atual, use

sudo xcode-select --switch /Applications/Xcode.app
joki
fonte
14
Lenda. Exatamente o meu problema em 10.14.6. Triste não pode votar duas vezes.
Diego Freniche 31/10/19
2
Você, senhor, é um senhor de conhecimento obscuro. Muito obrigado,
Rubin Simons
Obrigado pelas informações detalhadas! Finalmente funcionou, produzindo o "ERRO: Erro ao instalar jekyll: jekyll-sass-converter requer a versão Ruby> = 2.4.0.". Isso me faz rir.
Nickolay Olshevsky
@NickolayOlshevsky, nesse caso, você precisa instalar o ruby ​​via homebrew, atualmente na versão 2.6.5.
Joki
11
Você lenda da codificação.
Aljosha Novakovic
75

Caso você esteja usando ruby ​​2.0 ou 2.2 (obrigado @ patrick-davey) ou 2.3 (obrigado @juanitofatas).

sudo apt-get install ruby-dev
sudo apt-get install ruby2.0-dev
sudo apt-get install ruby2.2-dev
sudo apt-get install ruby2.3-dev

E você obtém o padrão aqui ...

mimoralea
fonte
6
Ou, se você estiver usando 2.2 ...sudo apt-get install ruby2.2-dev
patrickdavey
@ patrick-davey E: Unable to locate package ruby2.2-dev E: Couldn't find any package by regex 'ruby2.2-dev'
Aparichith 26/10/2015
@son provavelmente você usa uma versão antiga do Ubuntu. Tente atualizar.
Pithikos
Também recebi o mesmo erro e estou usando uma versão totalmente atualizada do Linux Mint. Eu não acho que a versão do SO seja o problema.
Andrew Faulkner
2
Se você estiver usando uma versão antiga do Ubuntu, como Trusty (14.04), adicione o PPA do brightbox para Ruby:sudo apt-add-repository -y ppa:brightbox/ruby-ng && sudo apt-get update && sudo apt-get install -y ruby2.2-dev
Siddhu 13/16
22

Também encontrei esse problema porque instalo o Ruby no Ubuntu via brightbox e pensei que o ruby-dev fosse o tronco do ruby. Então eu não instalei. Instale o ruby2.3-dev corrigido:

sudo apt-get install ruby2.3-dev
Juanito Fatas
fonte
19

Para aqueles que estão obtendo isso no Mac OS X, pode ser necessário executar o seguinte comando para instalar as ferramentas de linha de comando do XCode, mesmo se você já tiver o XCode instalado:

sudo xcode-select --install

Além disso, você deve concordar com os termos e condições do XCode executando o seguinte comando:

sudo xcodebuild -license
Juan De León
fonte
Esta foi a resposta correta para mim. Eu não tinha cabeçalhos de desenvolvimento Ruby. Depois de instalar o xCode, o comando original que tentei executar funcionou. Obrigado!
Doce Chilly Philly
No OSX com Mojave eu tive que correr que, como:su - $USER -c 'xcode-select --install'
Belden
Isso funcionou para mim também.
adougies
11

Eu tive um problema semelhante ao usar o cygwin para executar o seguinte comando:

$ gem install rerun

Eu o resolvi instalando os seguintes pacotes cygwin:

  • ruby-devel
  • libffi-devel
  • gcc-core
  • gcc-g ++
  • faço
  • automake1.15
Kinifwyne
fonte
Isto segfaults para mim:/cygdrive/z/.gem/ruby/extensions/x86-cygwin/json-1.8.3/json/ext/parser.so: [BUG] Segmentation fault at 0x0001b8
rr-
Resolvido executando rm -rf ~/.gem/e reemitindo o comando.
usar o seguinte
ruby-devno raspberry pi
CONvid19
11

A solução mais votada não funcionou na minha máquina (linux mint 18.04). Após uma análise cuidadosa, descobri que o g ++ estava ausente. Resolvido com

sudo apt-get install g + +

Milhas Davis
fonte
11
Isso funcionou para mim no Ubuntu 18.04. Eu também tive que fazer um sudo apt-get install make antes da instalação do g ++ para funcionar.
21418 Scott
Também posso confirmar a instalação makee g++corrigir o meu problema no Ubuntu 18.04!
Arda
9

caso você use o SUSE

sudo yast2 -i ruby-devel
Prokur
fonte
2
Eu prefiro sudo zypper in ruby-devel.
Lesik2008
5

Xcode 11 / macOS Catalina

No Xcode 11 / macOS Catalina, os arquivos de cabeçalho não estão mais no local antigo e o /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgarquivo antigo não está mais disponível.

Em vez disso, os cabeçalhos agora estão instalados no /usr/includediretório do caminho atual do SDK:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include

A maior parte desse diretório pode ser encontrada usando a saída de xcrun --show-sdk-path. E se você adicionar esse caminho à CPATHvariável de ambiente, os scripts de construção (incluindo os chamados via bundle) geralmente poderão encontrá-lo.

Eu resolvi isso definindo meu CPATHno meu .zshrcarquivo:

export CPATH="$(xcrun --show-sdk-path)/usr/include"

Após abrir um novo shell (ou em execução source .zshrc), não recebo mais a mensagem de erro mkmf.rb não é possível encontrar os arquivos de cabeçalho do ruby ​​em /usr/lib/ruby/ruby.h e o rubygems é instalado corretamente.

Nota sobre a criação de plataformas não-macOS

Se você estiver construindo para plataformas que não sejam do macOS, como iOS / tvOS / watchOS, essa alteração tentará incluir o SDK do macOS nessas plataformas, causando erros de construção. Para resolver, não defina CPATHa variável de ambiente no login ou defina-a temporariamente em branco ao executar da seguinte xcodebuildmaneira:

CPATH="" xcodebuild --some-args
Aaron Brager
fonte
2
Você tem alguma documentação sobre CPATH? Configurá-lo não está resolvendo o problema para mim. Quando verifiquei seu valor, ele parecia indefinido.
Ilias Karim
11
gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html - pode ser necessário encontrar uma variável de ambiente diferente, dependendo do idioma / compilador que você estiver usando. É normal que isso não seja definido por padrão
Aaron Brager
E, caso você não tenha visto em outros lugares, não pode haver espaços no Xcode caminho / nome
Feldur
De todas as respostas aqui, esta é a única solução que funcionou para mim. Eu estou Mojave 10.14.6e XCode 11.3.1. Muito obrigado, demorei 1 dia para resolver isso: /
user2350644
4

No Fedora 21 ou superior, você simplesmente abre um terminal e instala os arquivos de Desenvolvimento Ruby como root.

dnf install ruby-devel
emmojo
fonte
2

Pode ser necessário instalar o gcc após a instalação do ruby-devel

bott
fonte
1

Xcode -> Preferências -> Locais

mude as ferramentas de linha de comando para o Xcode 11.2.1

Chester Fang
fonte
1

No Mac 10.14, os arquivos de cabeçalho não parecem estar instalados no local correto. Em vez de alterar os caminhos como as outras correções, eu era capaz de executar isso:

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

Siga as instruções e ele resolveu esse problema para mim.

Shawn Lauzon
fonte
0

Você precisa instalar o ruby ​​inteiro e não apenas o pacote mínimo. O comando correto a ser usado é:

sudo apt install ruby-full

O comando a seguir também não instalará um ruby ​​completo:

sudo apt-get install ruby2.3-dev
aleksander_si
fonte
0

Para o Ubuntu 18, após verificar o arquivo de log mencionado durante a instalação

Resultados registrados em /var/canvas/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/nio4r-2.5.2/gem_make.out

com

less /var/canvas/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/nio4r-2.5.2/gem_make.out

Notei que makenão foi encontrado. Tão instalado make by

sudo apt-get install make

tudo funcionou.

Gökçer Gökdal
fonte
-2
sudo apt-get --reinstall install ruby

tente para o ubuntu 16.04

Ajmal Aamir
fonte