2 votes

ffi La compilation de la Gemme Ruby échoue

J'essaie d'installer un jekyll thème le bundle install a échoué avec l'erreur suivante :

Fetching ffi 1.12.2 (was 1.11.3)
Installing ffi 1.12.2 (was 1.11.3) with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /srv/dev-disk-by-label-data/home/mark/gems/gems/ffi-1.12.2/ext/ffi_c
/usr/local/rvm/rubies/ruby-2.6.0/bin/ruby -I /usr/local/rvm/rubies/ruby-2.6.0/lib/ruby/site_ruby/2.6.0 -r ./siteconf20200226-30145-3rdfp2.rb extconf.rb
/usr/local/rvm/rubies/ruby-2.6.0/lib/ruby/2.6.0/mkmf.rb:1565: warning: Insecure world writable dir /srv/dev-disk-by-label-data/home/mark/gems/bin in PATH, mode 040777
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/usr/local/rvm/rubies/ruby-2.6.0/bin/$(RUBY_BASE_NAME)
    --with-ffi_c-dir
    --without-ffi_c-dir
    --with-ffi_c-include
    --without-ffi_c-include=${ffi_c-dir}/include
    --with-ffi_c-lib
    --without-ffi_c-lib=${ffi_c-dir}/lib
    --enable-system-libffi
    --disable-system-libffi
    --with-libffi-config
    --without-libffi-config
    --with-pkg-config
    --without-pkg-config
/usr/local/rvm/rubies/ruby-2.6.0/lib/ruby/2.6.0/mkmf.rb:467:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
    from /usr/local/rvm/rubies/ruby-2.6.0/lib/ruby/2.6.0/mkmf.rb:552:in `try_link0'
    from /usr/local/rvm/rubies/ruby-2.6.0/lib/ruby/2.6.0/mkmf.rb:570:in `try_link'
    from /usr/local/rvm/rubies/ruby-2.6.0/lib/ruby/2.6.0/mkmf.rb:672:in `try_ldflags'
    from /usr/local/rvm/rubies/ruby-2.6.0/lib/ruby/2.6.0/mkmf.rb:1832:in `pkg_config'
    from extconf.rb:9:in `system_libffi_usable?'
    from extconf.rb:34:in `<main>'

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /srv/dev-disk-by-label-data/home/mark/gems/extensions/x86-linux/2.6.0/ffi-1.12.2/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /srv/dev-disk-by-label-data/home/mark/gems/gems/ffi-1.12.2 for inspection.
Results logged to /srv/dev-disk-by-label-data/home/mark/gems/extensions/x86-linux/2.6.0/ffi-1.12.2/gem_make.out

An error occurred while installing ffi (1.12.2), and Bundler cannot continue.
Make sure that `gem install ffi -v '1.12.2' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  minimal-mistakes-jekyll was resolved to 4.18.1, which depends on
    jekyll-feed was resolved to 0.13.0, which depends on
      jekyll was resolved to 4.0.0, which depends on
        jekyll-sass-converter was resolved to 2.1.0, which depends on
          sassc was resolved to 2.2.1, which depends on
            ffi

J'ai donc essayé de faire ce qu'il suggérait :

$ gem install ffi -v '1.12.2' --source 'https://rubygems.org/'
Building native extensions. This could take a while...
/usr/local/rvm/rubies/ruby-2.6.0/lib/ruby/site_ruby/2.6.0/rubygems/ext/builder.rb:76: warning: Insecure world writable dir /srv/dev-disk-by-label-data/home/mark/gems/bin in PATH, mode 040777
ERROR:  Error installing ffi:
    ERROR: Failed to build gem native extension.

    current directory: /srv/dev-disk-by-label-data/home/mark/gems/gems/ffi-1.12.2/ext/ffi_c
/usr/local/rvm/rubies/ruby-2.6.0/bin/ruby -I /usr/local/rvm/rubies/ruby-2.6.0/lib/ruby/site_ruby/2.6.0 -r ./siteconf20200226-30498-uxx1at.rb extconf.rb
/usr/local/rvm/rubies/ruby-2.6.0/lib/ruby/2.6.0/mkmf.rb:1565: warning: Insecure world writable dir /srv/dev-disk-by-label-data/home/mark/gems/bin in PATH, mode 040777
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/usr/local/rvm/rubies/ruby-2.6.0/bin/$(RUBY_BASE_NAME)
    --with-ffi_c-dir
    --without-ffi_c-dir
    --with-ffi_c-include
    --without-ffi_c-include=${ffi_c-dir}/include
    --with-ffi_c-lib
    --without-ffi_c-lib=${ffi_c-dir}/lib
    --enable-system-libffi
    --disable-system-libffi
    --with-libffi-config
    --without-libffi-config
    --with-pkg-config
    --without-pkg-config
/usr/local/rvm/rubies/ruby-2.6.0/lib/ruby/2.6.0/mkmf.rb:467:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
    from /usr/local/rvm/rubies/ruby-2.6.0/lib/ruby/2.6.0/mkmf.rb:552:in `try_link0'
    from /usr/local/rvm/rubies/ruby-2.6.0/lib/ruby/2.6.0/mkmf.rb:570:in `try_link'
    from /usr/local/rvm/rubies/ruby-2.6.0/lib/ruby/2.6.0/mkmf.rb:672:in `try_ldflags'
    from /usr/local/rvm/rubies/ruby-2.6.0/lib/ruby/2.6.0/mkmf.rb:1832:in `pkg_config'
    from extconf.rb:9:in `system_libffi_usable?'
    from extconf.rb:34:in `<main>'

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /srv/dev-disk-by-label-data/home/mark/gems/extensions/x86-linux/2.6.0/ffi-1.12.2/mkmf.log

extconf failed, exit code 1

La phrase "Pour voir pourquoi cette extension n'a pas réussi à compiler" semblait intéressante mais le fichier journal ne contient que des informations :

pkg-config --exists libffi"
| pkg-config --libs libffi
=> "-lffi\n"
"gcc -o conftest -I/usr/local/rvm/rubies/ruby-2.6.0/include/ruby-2.6.0/i686-linux -I/usr/local/rvm/rubies/ruby-2.6.0/include/ruby-2.6.0/ruby/backward -I/usr/local/rvm/rubies/ruby-2.6.0/include/ruby-2.6.0 -I.  -$
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: int main(int argc, char **argv)
4: {
5:   return 0;
6: }
/* end */

Tengo ruby-dev installé. La raison de cet échec n'est pas claire pour moi.

2voto

will Points 43

Pour tous ceux qui cherchent une solution, ceci m'a aidé.

gem install ffi -- --disable-system-libffi

ou pour une version spécifique

gem install ffi -v '1.13.1' -- --disable-system-libffi

https://medium.com/@leoliang.climber/missing-ffi-prep-closure-error-for-ffi-1-13-1-gem-70f800a48090

1voto

richman1000000 Points 11

J'ai eu ce problème aujourd'hui. installer GCC avant d'exécuter bundle install

1voto

brooksrelyt Points 3482

J'ai eu ce problème et j'ai essayé de modifier l'installation de ffi à nouveau. Mais tout ce que j'avais à faire était de mettre à jour.

Réparé pour moi en courant :

bundle update

et ensuite

bundle install

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X