web-dev-qa-db-fra.com

"Échec de la création de l'extension native gem" sous Windows 7 (le système ne trouve pas le chemin spécifié)

Le problème en bref

Je suis sous Windows et j'obtiens le message d'erreur suivant lors de l'exécution de gem install json —platform=Ruby:

The system cannot find the path specified.
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
The system cannot find the path specified.
ERROR:  Error installing json:
    ERROR: Failed to build gem native extension.

    C:/Ruby193/bin/Ruby.exe extconf.rb
creating Makefile


Gem files will remain installed in C:/Ruby193/lib/Ruby/gems/1.9.1/gems/json-1.8.1 for inspection.
Results logged to C:/Ruby193/lib/Ruby/gems/1.9.1/gems/json-1.8.1/ext/json/ext/generator/gem_make.out

Contexte et quelques enquêtes

Donc, tout d’abord, je ne suis pas un utilisateur de Windows, c’est donc un nouveau monde fantastique pour moi. Ayant hérité d'un ordinateur portable d'un travail qui contenait une collection folle de bibliothèques, j'ai réussi à supprimer toutes les installations précédentes de Ruby et du Devkit, puis à installer les éléments suivants:

  • Ruby 1.9.3p484 avec Ruby Installer dans C:/Ruby193
  • Ruby 2.0.0p353 avec Ruby Installer dans C:/Ruby200
  • Devkit DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe (pour Ruby 1x) extrait dans C:/Ruby193-devkit
  • Devkit DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe (32 bits pour Ruby 2x) extrait dans C:/Ruby200-devkit-x32.

J'ai ensuite installé Pik 0.2.8 en tant que gem et ai exécuté pik_install dans un nouveau répertoire C:/bin conformément aux instructions d'installation.

Mon chemin ressemble à ceci:

PATH=C:\bin;C:\Ruby193\bin;C:\windows;C:\windows\system32;C:\windows\system32\Wbem;c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\Common Files\Roxio Shared\DLLShared\;C:\Program Files\Java\jdk1.6.0_33\bin;C:\Program Files (x86)\Common Files\Apple\Mobile Device Support\;C:\Program Files (x86)\Common Files\Apple\Apple Application Support;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files\TortoiseSVN\bin;C:/inpath;C:\Program Files (x86)\WinMerge;C:\ChromeDriver;C:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\WIDCOMM\Bluetooth Software\syswow64

Les éléments importants étant que C:/bin et C:/Ruby193/bin sont dans le chemin. Cela signifie que Ruby 1.9.3 est chargé par défaut lorsque je lance un shell et que je peux passer avec succès à la version 2.0.0 avec pik use 2.0.0p353. En d'autres termes, la pique fonctionne bien.

Devkit est destiné à permettre la compilation de binaires C/C++ natifs à partir de gems sous Windows, de manière à éviter l'utilisation de binaires Windows précompilés.

Comme j'ai deux versions de Ruby installées et que chacune nécessite un devkit différent (une pour 2x et une pour 1x), j'ai dû effectuer la configuration pour devkit deux fois:

cd C:/Ruby193-devkit
Ruby dk.rb init
# Edit config.yml to remove all but Ruby193
Ruby dk.rb install

cd C:/Ruby200-devkit
Ruby dk.rb init
# Edit config.yml to remove all but C:/Ruby200
Ruby dk.rb install

À ce stade, j'aurais pu exécuter gem install json —platform=Ruby avec succès, mais l'erreur ci-dessus s'est produite. Après avoir creusé un peu j'ai découvert ceci , qui conseille de vérifier que COMSPEC est défini correctement et de supprimer toutes les clés d'exécution automatique de HKEY_CURRENT_USER\Software\Microsoft\Command Processor - j'en ai eu une de ANSIcon et je l'ai dûment supprimée.

Malheureusement, je n’étais toujours pas en mesure d’installer le json gem.

Je me suis alors rendu compte que peut-être la mauvaise version de GCC était utilisée ou introuvable. Les deux versions de Devkit sont fournies avec des versions différentes de gcc:

> C:\Ruby193-devkit\mingw\bin\gcc —version
gcc (tdm-1) 4.5.2

> C:\Ruby200-devkit-x32\mingw\bin\gcc —version
gcc (rubenv-4.7.2-release) 4.7.2

Je me suis alors demandé si pik ne chargeait pas la version de devtools (et donc de gcc) pour la version spécifique de Ruby que j'avais choisie, et utilisait toujours la 1.9.3. Grâce à cet article , il semble que ce ne soit pas le cas:

> pik use 193
> where Ruby
C:\Ruby193\bin\Ruby.exe

> cat C:\Ruby193\lib\Ruby\site_Ruby\devkit.rb
# enable RubyInstaller DevKit usage as a vendorable helper library
unless ENV['PATH'].include?('C:\\Ruby193-devkit\\mingw\\bin') then
  puts 'Temporarily enhancing PATH to include DevKit...'
  ENV['PATH'] = 'C:\\Ruby193-devkit\\bin;C:\\Ruby193-devkit\\mingw\\bin;' + ENV['PATH']
end
ENV['RI_DEVKIT'] = 'C:\\Ruby193-devkit'
ENV['CC'] = 'gcc'
ENV['CXX'] = 'g++'
ENV['CPP'] = 'cpp'


> pik use 200
> where Ruby
C:\Ruby200\bin\Ruby.exe

> cat C:\Ruby200\lib\Ruby\site_Ruby\devkit.rb
# enable RubyInstaller DevKit usage as a vendorable helper library
unless ENV['PATH'].include?('C:\\Ruby200-devkit-x32\\mingw\\bin') then
  phrase = 'Temporarily enhancing PATH to include DevKit...'
  if defined?(Gem)
    Gem.ui.say(phrase) if Gem.configuration.verbose
  else
    puts phrase
  end
  puts "Prepending ENV['PATH'] to include DevKit..." if $DEBUG
  ENV['PATH'] = 'C:\\Ruby200-devkit-x32\\bin;C:\\Ruby200-devkit-x32\\mingw\\bin;' + ENV['PATH']
end
ENV['RI_DEVKIT'] = 'C:\\Ruby200-devkit-x32'
ENV['CC'] = 'gcc'
ENV['CXX'] = 'g++'
ENV['CPP'] = 'cpp'

(Je n'ai pas de chat disponible sur les fenêtres, mais l'explication est plus claire)

Comme vous pouvez le constater, il semblerait que la version correcte de devkit soit ajoutée au chemin par devkit.rb, qui est évidemment chargé car mon erreur contient 'Amélioration temporaire de PATH pour inclure DevKit…'.

Retour à l'erreur d'origine

C'était:

The system cannot find the path specified.
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
The system cannot find the path specified.
ERROR:  Error installing json:
    ERROR: Failed to build gem native extension.

    C:/Ruby193/bin/Ruby.exe extconf.rb
creating Makefile


Gem files will remain installed in C:/Ruby193/lib/Ruby/gems/1.9.1/gems/json-1.8.1 for inspection.
Results logged to C:/Ruby193/lib/Ruby/gems/1.9.1/gems/json-1.8.1/ext/json/ext/generator/gem_make.out

Malheureusement, le journal des résultats n’offre pas beaucoup d’aide. Voici à quoi ressemble gem_make.out:

C:/Ruby193/bin/Ruby.exe extconf.rb
creating Makefile

Je pensais que extconf.rb pourrait offrir de l’aide, mais je ne peux pas en tirer la tête ni la queue:

require 'mkmf'

unless $CFLAGS.gsub!(/ -O[\dsz]?/, ' -O3')
  $CFLAGS << ' -O3'
end
if CONFIG['CC'] =~ /gcc/
  $CFLAGS << ' -Wall'
  unless $DEBUG && !$CFLAGS.gsub!(/ -O[\dsz]?/, ' -O0 -ggdb')
    $CFLAGS << ' -O0 -ggdb'
  end
end

$defs << "-DJSON_GENERATOR"
create_makefile 'json/ext/generator'

Le Makefile dans C:/Ruby193/lib/Ruby/gems/1.9.1/gems/json-1.8.1/ext/json/ext/generatorressemble à ceci . Il me semble étrange que ce Makefile soit même créé.

Si quelqu'un avec un peu plus d'expérience Windows/Ruby pouvait nous éclairer, ce serait étonnant!

PS. Je suis sous Windows 7 Professional SP1

Mise à jour après quelques recherches supplémentaires

Je voulais donc vérifier que devkit améliorait le chemin avec le bon répertoire de devkit. Grâce à une suggestion d'un autre SO question, j'ai déplacé les installations de devkit dans les répertoires Ruby:

Tdm devkit réside maintenant dans C:\Ruby193\devkit tandis que le mingw64 réside dans C:\Ruby200\devkit. Après avoir exécuté Ruby dk.rb install -f pour chaque devkit, j'ai ouvert les deux fichiers devkit.rb pour vérifier que le chemin d'accès avait été mis à jour correctement. Ils avaient, et j’ai mis à jour les options de vente, il devrait donc indiquer "Amélioration temporaire de PATH inclut DevKit pour la version 1.9" ou "Amélioration temporaire de PATH inclut DevKit pour 2". En guise de confirmation que le bon devkit est en cours de chargement:

C:\>pik 193

C:\>Ruby -rdevkit -ve "puts ENV['PATH']"
Ruby 1.9.3p484 (2013-11-22) [i386-mingw32]
Temporarily enhancing PATH to include DevKit for 1.9...
C:\Ruby193\devkit\bin;C:\Ruby193\devkit\mingw\bin;C:\bin;C:\Ruby193\bin;C:\windows;C:\windows\system32;C:\windows\system32\Wbem;c:\Program Files (x86)
\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Pro
gram Files (x86)\Common Files\Roxio Shared\DLLShared\;C:\Program Files\Java\jdk1.6.0_33\bin;C:\Program Files (x86)\Common Files\Apple\Mobile Device Su
pport\;C:\Program Files (x86)\Common Files\Apple\Apple Application Support;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files\TortoiseSVN\bin
;C:/inpath;C:\Program Files (x86)\WinMerge;C:\ChromeDriver;C:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\WIDCOMM\Bluetooth Software\sy
swow64

C:\>pik 200

C:\>Ruby -rdevkit -ve "puts ENV['PATH']"
Ruby 2.0.0p353 (2013-11-22) [i386-mingw32]
Temporarily enhancing PATH to include DevKit for 2...
C:\Ruby200\devkit\bin;C:\Ruby200\devkit\mingw\bin;C:\bin;C:\Ruby200\bin;C:\windows;C:\windows\system32;C:\windows\system32\Wbem;c:\Program Files (x86)
\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Pro
gram Files (x86)\Common Files\Roxio Shared\DLLShared\;C:\Program Files\Java\jdk1.6.0_33\bin;C:\Program Files (x86)\Common Files\Apple\Mobile Device Su
pport\;C:\Program Files (x86)\Common Files\Apple\Apple Application Support;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files\TortoiseSVN\bin
;C:/inpath;C:\Program Files (x86)\WinMerge;C:\ChromeDriver;C:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\WIDCOMM\Bluetooth Software\sy
swow64

Alors que tout ressemble à cela fonctionne correctement. mais:

C:\>gem install json --platform=Ruby
Temporarily enhancing PATH to include DevKit for 2...
Building native extensions.  This could take a while...
The system cannot find the path specified.
ERROR:  Error installing json:
        ERROR: Failed to build gem native extension.

    C:/Ruby200/bin/Ruby.exe extconf.rb
creating Makefile


Gem files will remain installed in C:/Ruby200/lib/Ruby/gems/2.0.0/gems/json-1.8.1 for inspection.
Results logged to C:/Ruby200/lib/Ruby/gems/2.0.0/gems/json-1.8.1/ext/json/ext/generator/gem_make.out

C:\>pik 193

C:\>gem install json --platform=Ruby
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
The system cannot find the path specified.
ERROR:  Error installing json:
        ERROR: Failed to build gem native extension.

    C:/Ruby193/bin/Ruby.exe extconf.rb
creating Makefile


Gem files will remain installed in C:/Ruby193/lib/Ruby/gems/1.9.1/gems/json-1.8.1 for inspection.
Results logged to C:/Ruby193/lib/Ruby/gems/1.9.1/gems/json-1.8.1/ext/json/ext/generator/gem_make.out

Cela nous dit clairement deux choses:

  1. Un autre fichier devkit.rb est en cours de chargement lorsque j'utilise Ruby 1.9, car le message "for 1.9" n'est pas en cours d'impression.
  2. Il est peu probable que ce soit le problème, car l'erreur est identique dans les deux cas.

Je vais voir si je peux construire manuellement en utilisant les Makefiles générés.

20
dannysmith

Donc, ce n'est pas la meilleure réponse au monde, mais il semble que je suis tombé sur une solution. Si je mets le drapeau prolixe, tout fonctionne bien:

gem install json --platform=Ruby --verbose

Il y a un journal ici: http://Gist.github.com/dannysmith/8055495

Cela n'a aucun sens - ce serait formidable si quelqu'un pouvait expliquer pourquoi cela semble avoir corrigé l'erreur. C'est peut-être un bug dans devkit?

11
dannysmith

Gem json est installé avec les versions 1.8.1 mais je n’ai pas pu résoudre ce problème avec json 1.6.1 en utilisant

gem install json --platform=Ruby --verbose

Donc, j'ai essayé d'ici https://github.com/oneclick/rubyinstaller/issues/184

gem update --system 2.0.3

Et après ça 

gem install json -v 1.6.1 --platform=Ruby --verbose

Il résout le problème spécifique à json 1.6.1 pour la machine Win 7 (64 bits)

7
Swapnil Kotwal

Essayez d'exécuter l'invite de commande en mode administrateur. Après 7 à 10 heures, j'ai compris cela ...

7
obesechicken13

Comment j'ai résolu le problème: 

  1. Téléchargé le dernier programme d’installation Ruby depuis https://rubyinstaller.org/downloads/
  2. Exécutez le programme d'installation en suivant les invites pour installer les dépendances.
  3. Redémarré mon ordinateur.
  4. Ajout du répertoire Ruby/bin à PATH.
0
Garry Gomez

Installez la version 32 bits sur Windows ...

ver
windows 6.1.76011

64 bits donnaient un message d'erreur sur le makefile et les en-têtes. J'ai essayé toutes les autres suggestions, y compris celles sur rubyinstaller concernant COMSPEC et le registre, l'ajout de gcc à path, etc. Certaines gemmes seraient installées mais git_fame et json ne seraient pas nécessaires à la compilation.

Edit: Il semble que git_fame utilise mimer_plus. mimer_plus assume les outils GNU (outils Unix). On dirait que vous devez d'abord installer mingw. Ce n'était pas clairement indiqué sur la page rubyinstaller.

0
codeslapper

J'ai eu le même problème. J'ai utilisé PowerShell pour vérifier mon chemin 

ps> $ s = $ env: chemin

ps> $ s.split ("{;}")

bien sûr, mon Ruby Mingw n'était pas sur le chemin. J'ai le Ruby\bin dans le chemin mais le mingw\bin était sous un autre dossier. Je suis allé dans mon chemin d’environnement et je l’ai ajouté et mon installation a fonctionné.

0
EarlLamont

Assurez-vous que la version de Ruby que vous avez installée (32 ou 64 bits) correspond à la version de DevKit. Ils doivent tous les deux avoir 32 ou 64 ans, ce qui était le problème que j'avais. Ce n’est peut-être pas la question exacte ici, mais je pensais que jetterais ça là-bas. Voici un post à vérifier:

Rails on windows - problème d'installation

0
Mosab Sasi