Impossible de créer l'extension native gem (installation de Compass)


275

Lorsque j'essaie d'installer la dernière version de boussole ( https://rubygems.org/gems/compass/versions/1.0.0.alpha.17 ), j'obtiens l'erreur suivante.

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

Que se passe t-il ici? Comment installer la dernière boussole sans erreur?


un doublon possible de l' installation
Nakilon

s'il vous plaît assurez-vous que vous avez fait sur votre système.
Trieur

Réponses:


577

Essayez ceci, puis essayez de réinstaller la boussole

apt-get install ruby-dev

33
Cela corrige l'erreur sur Ubuntu, mais il semble que OP utilise OSX.
mhnagaoka

1
Correction pour moi sur Ubuntu 14.04 LTS
jeudi

30
A travaillé sur CentOS avec "yum install ruby-devel" qui est l'équivalent. Merci !
B2F

6
C'est drôle de trouver une solution à mon problème Ubuntu dans une réponse à une question OSx. Néanmoins, vous avez obtenu mon vote positif car votre réponse vient de résoudre mon problème. Tnx!
e-sushi

3
Une idée de comment faire fonctionner cela sur Windows? J'ai installé les outils de développement Ruby en utilisant choco install ruby2.devkitmais cela ne fonctionne toujours pas
jtate

124

Afin d'installer la boussole sur Mac OS X 10.10 (Yosemite) devait effectuer les opérations suivantes:

1. Configurer l'environnement Ruby

  • Assurez-vous que ruby ​​est installé et à jour: ruby -v
  • Mettre à jour les gemmes sudo gem update --system

2. Configurer l'environnement MAC

Installez les outils de ligne de commande Xcode, c'est la clé pour installer Compass.

xcode-select --install

L'installation des outils de ligne de commande Xcode est la clé pour faire fonctionner Compass sous OS X

3. Installez Compass

sudo gem install compass

3
Pour moi, c'était exactement la bonne réponse, il a besoin des outils de ligne de commande Xcode
svnm

2
Merci, travaillé pour moi, vous avez raison, les outils de ligne de commande Xcode sont la clé.
Sarcom

5
Cela a fonctionné pour moi avec un ajout - vous devez réellement démarrer XCODE pour pouvoir accepter le contrat de licence et le laisser terminer la configuration. Cela pourrait valoir la peine d'être ajouté à votre réponse.
Bruford

L'acceptation de la mise à jour (termes de l'accord) via l'interface graphique a également fonctionné.
cassioscabral

Sur un MacBook Pro récemment mis à jour vers Sierra 10.12.6, j'ai également dû exécuter "sudo xcodebuild -license" pour accepter les termes et conditions, avant d'exécuter sudo gem install compass ...
jocherra

46

La meilleure façon est sudo apt-get install ruby-compassd'installer une boussole.


1
Wow, parfois c'est si facile ^^ a essayé d'installer la boussole avec gem, mais il y avait quelques dépendances non résolues par gem. Avec apt-get, cela a bien fonctionné! Merci
naitsirch


30

J'ai eu du mal avec vous le même problème pendant environ 3 heures. Depuis Compass 1.0.alpha19, la configuration requise pour la version 1.9.3 de rvm.

Il existe plusieurs publications non collectées, mais ce qui a fonctionné pour moi était le suivant:

  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

et ça l'a fait. J'espère que cela fonctionne aussi pour vous!


J'ai récemment eu le même problème mais avec une version plus récente. Ce que j'ai fait, c'est désinstaller la version ruby ​​que j'ai installée précédemment avec aptitude, puis je l'ai réinstallée en suivant les instructions sur: rvm.io/rvm/install . Avec la nouvelle boussole version rubis / RVM construite correctement.
adosaiguas

2
Merci pour cela, très utile. J'ai changé l'étape 3 pour rvm install ruby-2.1.2que 1.9.3 ne soit plus mis à jour
timelf123

24

Pour résoudre ce problème, je devais m'assurer d'avoir la version la plus récente de Ruby et des gemmes gem update --system; puis, je devais assurer que Xcode et les outils de ligne de commande ont été installés: xcode-select --install.


xcode-select --installa été fait mais cela ne le résout pas pour moi
Ade

14

Sur Mac OS, vous devez installer cette fonctionnalité!

xcode-select --install

10

Salut, c'était un défi de le faire fonctionner sur Mac, de toute façon voici une solution

  1. Installer macports
  2. Installer rvm
  3. Redémarrer le terminal
  4. Courez rvm requirementspuis courezrvm install 2.1
  5. Et dernière étape pour courir gem install compass --pre

Je ne suis pas sûr mais la version ruby ​​sur Mavericks ne prend pas en charge les extensions natives, etc ... donc si vous pointez sur une autre version ruby ​​comme je l'ai fait "2.1", cela fonctionne très bien.


Je recommanderais de ne pas utiliser macports.
nomis

6

Je ne sais pas pourquoi aucun de ceux-ci n'est marqué comme la bonne réponse, mais j'ai atterri ici grâce à une recherche Google, donc je vais transmettre ce que je sais ...

La méthode de @ paul_g était assez proche pour moi, mes pas sur un Mac osx10.9 Retina:

  • Installer macports
  • Installer rvm (stable avec l' --insecureindicateur ruby add pour les problèmes liés à SSL) $\curl -sSL --insecure https://get.rvm.io | bash -s stable --ruby
  • Redémarrez le terminal / ressourcez votre profil
  • Run rvm requirements --with-gcc=clangVous ne devez mettre à jour Ruby parce que vous avez téléchargé la dernière version stable
  • Et dernière étape pour courir gem install compass --pre

5

Si vous utilisez Ubuntu, vous devriez essayer d'installer build-essential

apt install build-essential

J'ai eu des problèmes avec l'installation de gemmes sur une nouvelle installation d'ubuntu, et cette solution a fonctionné pour moi.


J'ai eu le même problème. D'autres personnes devraient voter de manière positive.
Sorter

4

Vous pourriez avoir besoin d'installer les outils de ligne de commande d'Apple, qui ne sont probablement pas installés par défaut sur votre système. J'obtenais la même erreur, mais avant de suivre l'une des instructions ici, j'ai installé les outils de ligne de commande (en raison d'un problème sans rapport) et voici la boussole installée sans problème lorsque j'ai réessayé. YMMV.


Cela a résolu le problème ci-dessus pour moi, donc je dirais que c'est une réponse acceptable à la question ci-dessus.
Peter J Harrison

4

Pour installer Compass sur Yosemite, vous devez configurer l'environnement Ruby et installer les outils de ligne de commande Xcode. Mais, chose la plus importante, après la mise à jour de Xcode, assurez-vous de lancer l'application Xcode et d'accepter les termes du contrat de licence Apple . Il achèvera l'installation des composants. Après cela, vous pouvez installer Compass: sudo gem install compass


3

Pour macOS 10.14 Mojave, assurez-vous que vous avez déjà installé les outils de ligne de commande via xcode-select --installet exécutez la commande suivante pour installer les en-têtes std.

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

Essayez à nouveau votre commande.


3

vous devez avoir gcc, json_pure

je collecte des informations sur plusieurs articles

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

Salut si ** sudo gem update --system ** ne fonctionne pas, vous avez une erreur dans la mise à jour, puis utilisez

mise à jour sudo gem - système 2.7.8


J'ai également dû courir sudo yum install -y redhat-rpm-configpour Fedora 24 avant d'installer la boussole à cause de cette erreur:gcc: error: /usr/lib/rpm/redhat/redhat-hardened-cc1: No such file or directory
Bryce Guinta

sudo gem update --systemm'a donné des erreurs: ERROR: While executing gem ... (Errno::EPERM) Operation not permitted @ rb_sysopen - System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/gem:(
Ade

2

Sur yosemite, il vous suffit d'installer les outils de ligne de commande. alors ça marche.

Même si d'autres gemmes se sont bien installées. Vous devez exécuter xcode-select --install pour que la boussole d'installation de gemmes fonctionne.

Bonne chance.


2

Sur Mac OS X 10.9, si vous essayez xcode-select --install, vous obtiendrez l'erreur suivante:

Impossible d'installer le logiciel car il n'est pas actuellement disponible sur le serveur de mise à jour logicielle.

La solution consiste à télécharger les outils de ligne de commande (OS X 10.9) directement à partir du site Web d'Apple: https://developer.apple.com/downloads/index.action?name=for%20Xcode%20-

Vous pourrez alors installer la dernière version des outils de ligne de commande.


2

Dans Ubuntu 14.04, lors de l'exécution d' apt-get install rubygems , il y a une erreur

E: Le package 'rubygems' n'a pas de candidat d'installation

suivez la commande pour résoudre les problèmes.

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


2

Essayez brew install coreutils.

J'ai rencontré ce problème lors de la reconstruction d'un projet sass / compass vieillissant récemment mis à jour vers ruby ​​2.2.5 par un collègue. Le projet utilise rvm et bundler. Ce sont mes commandes

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

Cela m'a fait frapper le fameux ffi erreurs d'installation, qui sont signalées dans l'environnement StackOverflow:

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

La plupart des suggestions pour résoudre ce problème consistent à installer les outils de ligne de commande Xcode. Cependant, cela était déjà installé dans mon environnement:

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

D'autres suggestions ont dit d'installer gcc ... alors j'ai essayé:

$ brew install gcc46

Mais cela a également échoué en raison d'un défaut de segmentation ... ¯\_(ツ)_/¯ .

J'ai donc essayé d'installer la boussole à la main, juste pour voir si cela donnerait la même ffierreur:

$ gem install compass

Mais à ma grande surprise, j'ai eu une erreur totalement différente:

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

J'ai donc recherché ce problème et trouvé cet ancien article de blog qui disait d'installer coreutils:

$ brew install coreutils

Après l'installation coreutils avec Homebrew, bundler a pu terminer et installer la boussole et les dépendances avec succès.

La fin.



2

quand

installation excessive de gemme

est exécuté également cette erreur a été placée dans le terminal.

Failed to build gem native extension

s'il vous plaît faites de même

xcode-select --install

et cela résoudra aussi ce problème


Je comprends xcode-select: error: command line tools are already installed, use "Software Update" to install updates. Cela ne le résout pas.
Ade

2

Pour Mac OS:

Mon erreur était que j'avais oublié de sélectionner l'option dans XCode - Préférences - Emplacements - Outils de ligne de commande après la nouvelle installation de XCode (j'avais 2 versions et plus tard j'en ai supprimé une). Peut-être que cela aidera quelqu'un.

entrez la description de l'image ici


1

Essayez ceci, puis essayez de réinstaller la boussole

sudo apt install ruby-full

0

J'ai eu le même problème sur Linux Mint mais j'ai pu le résoudre en désinstallant ruby ​​et en le réinstallant.

Désinstaller ruby:

sudo apt-get remove ruby

Il a rapporté quelques paquets rubis comme:

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.

Désinstaller les packages restants *

apt-get autoremove

Réinstaller Ruby

sudo apt-get install ruby2.2

Installer la boussole

sudo gem install compass

La dernière commande a été exécutée avec succès.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.