更新到Catalina后无法安装Jekyll-安装ffi1.9.18时发生错误

问题描述

我已经更新了Mac以使用Catalina,现在尝试安装Jekyll时遇到各种问题。

这是我运行常规的grunt设置时得到的:

Running "jekyll:dist" (jekyll) task
>> Error: Command Failed: bundle exec jekyll -v
>> bundler: command not found: jekyll
>> Install missing gem executables with `bundle install`
Warning: Please install Jekyll before running this task. Use --force to continue.

然后我运行sudo bundle install

然后我得到这个:

Don't run Bundler as root. Bundler can ask for sudo if it is needed,and installing your bundle as root will break this
application for all non-root users on this machine.
Fetching gem Metadata from https://rubygems.org/.........
Using public_suffix 3.0.1
Using addressable 2.5.2
Using bundler 2.1.4
Using colorator 1.1.0
Fetching ffi 1.9.18
Installing ffi 1.9.18 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Applications/MAMP/htdocs/hangr/vendor/bundle/ruby/2.6.0/gems/ffi-1.9.18/ext/ffi_c
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby -I
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0 -r ./siteconf20201016-30905-1yh2cx1.rb extconf.rb
checking for ffi_call() in -lffi... yes
checking for ffi_prep_closure()... yes
checking for ffi_raw_call()... yes
checking for ffi_prep_raw_closure()... yes
checking for shlwapi.h... no
checking for rb_thread_blocking_region()... no
checking for rb_thread_call_with_gvl()... yes
checking for rb_thread_call_without_gvl()... yes
checking for ffi_prep_cif_var()... yes
creating extconf.h
creating Makefile

current directory: /Applications/MAMP/htdocs/hangr/vendor/bundle/ruby/2.6.0/gems/ffi-1.9.18/ext/ffi_c
make "DESTDIR=" clean

current directory: /Applications/MAMP/htdocs/hangr/vendor/bundle/ruby/2.6.0/gems/ffi-1.9.18/ext/ffi_c
make "DESTDIR="
compiling AbstractMemory.c
compiling ArrayType.c
compiling Buffer.c
compiling Call.c
Call.c:355:5: error: implicit declaration of function 'rb_thread_call_without_gvl' is invalid in C99
[-Werror,-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 error generated.
make: *** [Call.o] Error 1

make Failed,exit code 2

Gem files will remain installed in /Applications/MAMP/htdocs/hangr/vendor/bundle/ruby/2.6.0/gems/ffi-1.9.18 for inspection.
Results logged to
/Applications/MAMP/htdocs/hangr/vendor/bundle/ruby/2.6.0/extensions/universal-darwin-19/2.6.0/ffi-1.9.18/gem_make.out

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

In Gemfile:
  jekyll was resolved to 3.4.3,which depends on
    jekyll-sass-converter was resolved to 1.5.1,which depends on
      sass was resolved to 3.5.5,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

我跑步时

ruby -v

我明白了

ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19]

我根本不知道我需要做什么。

我跑步时

jekyll -v

我明白了

-bash: /usr/local/bin/jekyll: /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby: bad interpreter: No such file or directory

我尝试从另一篇文章中运行它,但是没有运气 gem install ffi -v '1.9.18' -- --with-cflags="-Wno-error=implicit-function-declaration"

有人有什么想法吗?

谢谢

解决方法

根本问题是,您无法安装jekyl的依赖关系之一-特别是the ffi gem。知道这一点将更好地帮助您进行锻炼。

通过阅读包输出,您可以看到这是错误。学习如何阅读这些内容,以便将来更好地帮助自己;如果要搜索“在macOS上安装ffi”,则可能会have found more information available to you

鉴于您刚刚安装了Catalina,GCC可能不在您的计算机上,或者已经过时,或者未链接。

尝试运行xcode-select --install以(重新)安装Xcode命令行工具。

也-停止使用SUDO

在软件包输出的最上方是一个警告,警告您在安装gem时不应该使用sudo。遵循它是一个很好的建议!

甚至更好的建议是使用rbenv或rvm为正在使用的每个红宝石应用程序创建宝石集或环境。但是,如果您不走这条路,至少**,请停止使用sudo **