7
votes

Gem install ffi Échec de la construction de l'extension native Gem

J'ai des difficultés à faire l'installation de bundle dans un projet sur lequel je travaille dans Rails 4.2.10. Quand je fais le bundle, je reçois l'erreur suivante:

Une erreur s'est produite lors de l'installation de ffi (1.9.25), et Bundler ne peut pas continuer. Assurez-vous que gem install ffi -v '1.9.25' réussit avant le regroupement.

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

    current directory: /xxx/xxx/.rvm/gems/ruby-2.5.3/gems/ffi-1.9.25/ext/ffi_c
/xxx/xxx/.rvm/rubies/ruby-2.5.3/bin/ruby -r ./siteconf20190110-6923-1jimorr.rb 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_closure_alloc()... no
checking for ffi_raw_call()... no
checking for shlwapi.h... no
checking for ruby/thread.h... yes
checking for rb_thread_blocking_region()... no
checking for rb_thread_call_with_gvl()... yes
checking for rb_thread_call_without_gvl()... yes
creating extconf.h
creating Makefile

current directory: /xxx/xxx/.rvm/gems/ruby-2.5.3/gems/ffi-1.9.25/ext/ffi_c
make "DESTDIR=" clean

current directory: /xxx/xxx/.rvm/gems/ruby-2.5.3/gems/ffi-1.9.25/ext/ffi_c
make "DESTDIR="
Configuring libffi
clang: error: unsupported option '-print-multi-os-directory'
clang: error: no input files
cd "/xxx/xxx/.rvm/gems/ruby-2.5.3/gems/ffi-1.9.25/ext/ffi_c/libffi-x86_64-darwin18" && /Volumes/Macintosh HD/Applications/Xcode.app/Contents/Developer/usr/bin/make
/bin/sh: /Volumes/Macintosh: No such file or directory
make: *** ["/xxx/xxx/.rvm/gems/ruby-2.5.3/gems/ffi-1.9.25/ext/ffi_c/libffi-x86_64-darwin18"/.libs/libffi_convenience.a] Error 127

make failed, exit code 2

Gem files will remain installed in /xxx/xxx/.rvm/gems/ruby-2.5.3/gems/ffi-1.9.25 for inspection.
Results logged to /xxx/xxx/.rvm/gems/ruby-2.5.3/extensions/x86_64-darwin-18/2.5.0/ffi-1.9.25/gem_make.out

Quand j'exécute gem install ffi -v '1.9.25' également une erreur se produit:

In Gemfile:
  s3_direct_upload was resolved to 0.1.6, which depends on
    sass-rails was resolved to 5.0.7, which depends on
      sass was resolved to 3.6.0, which depends on
        sass-listen was resolved to 4.0.0, which depends on
          rb-inotify was resolved to 0.9.10, which depends on
            ffi

J'ai essayé de nombreuses solutions en ligne mais je ne parviens pas à résoudre ce problème. Il semble que le problème vient de mon système, car je suis nouveau dans l'équipe et les autres développeurs n'ont pas pu m'aider car ils n'ont pas ce genre de problème.


9 commentaires

voir les réponses dans: stackoverflow.com/questions/7852566/... peut-être que certains vous aideront


Je suis sur un mac et j'ai essayé de mettre dans mon fichier gem le ffi mais on m'a demandé de le supprimer car le gemfile maître ne contient pas le ffi. Y a-t-il d'autres solutions?


Conseil général: vous manquez certaines dépendances natives (bibliothèques) et vous devez les installer. Vous n'avez pas besoin de modifier le fichier gem, pour tester si tout va bien, lancez simplement gem install ffi -v '1.9.25' (comme vous l'avez fait)


Donc, comme je l'ai montré ci-dessus, cela donne toujours la même erreur. Veuillez vérifier la dernière partie de ma question


C'est l'erreur: `gem install ffi -v '1.9.25' Construire des extensions natives. Cela peut prendre un certain temps ... ERREUR: Erreur lors de l'installation de ffi: ERREUR: Échec de la construction de l'extension native gem. »


oui, je souligne juste que c'est un bon moyen de le tester (et modifier le gemfile ne l'est pas)


Ok mais sans résoudre cela, je ne peux pas faire le bundle et travailler sur les tâches que j'ai j'ai essayé beaucoup de choses :(


avez-vous installé les outils de développement Mac? xcode-select --install


Oui je l'ai installé J'ai la version 10.0 (10A255)


3 Réponses :


0
votes

Selon la libffi README, seul GCC est un compilateur testé sur macOS. Vous utilisez Clang, qui ne prend pas en charge l'option de ligne de commande -print-multi-os-directory .

Vous devez soit patcher libffi pour fonctionner avec Clang, soit utiliser GCC.


0 commentaires

0
votes

Votre erreur est la suivante Configuration de libffi clang: erreur: option non prise en charge '-print-multi-os-directory' clang: erreur: aucun fichier d'entrée car Clang (qui est le compilateur C que vous utilisez) ne prend pas en charge l'option '-print-multi-os-directory' .

Pourriez-vous vérifier que les outils de ligne de commande X-Code sont parfaitement installés en exécutant la commande suivante? xcode-select --install

Souhaitez-vous également essayer brew install automake autoconf libtool libffi pour installer les dépendances requises?


5 commentaires

xcode-select: erreur: les outils de ligne de commande sont déjà installés, utilisez "Software Update" pour installer les mises à jour. Tout est déjà installé. Brew également installé.


Avez-vous installé automake autoconf libtool et libffi?


Oui tout est installé Attention: automake 1.16.1_1 est déjà installé et à jour Pour réinstaller 1.16.1_1, exécutez brew reinstall automake Attention: autoconf 2.69 est déjà installé et à jour à réinstallez 2.69, exécutez brew reinstall autoconf Attention: libtool 2.4.6_1 est déjà installé et à jour Pour réinstaller 2.4.6_1, exécutez brew reinstall libtool Attention: libffi 3.2 .1 est déjà installé et à jour Pour réinstaller 3.2.1, exécutez brew reinstall libffi


Alors peut-être que vous devrez essayer GCC avec brew install gcc . Plus d'instructions sur la façon de le configurer: stackoverflow.com/questions/28970935/...


Désolé, je n'ai pas pu vous aider, j'ai lu quelque part que l'utilisation d'un autre pourrait résoudre votre problème.



6
votes

J'ai réussi à installer ffi avec la commande suivante:

LDFLAGS="-L/usr/local/opt/libffi/lib" PKG_CONFIG_PATH="/usr/local/opt/libffi/lib/pkgconfig" gem install ffi -v '1.9.25'

Trouvé sur une carte japonaise


1 commentaires

Cela a fonctionné pour moi sur OSX 10.15.2 avec Ruby 2.7.0 et ffi 1.11.3.