Gem 安装 ffi 失败,无法构建本地扩展。

13

我在一个Rails 4.2.10项目中遇到了bundle install的问题。当我执行bundle命令时,出现以下错误:

ffi (1.9.25)安装过程中发生错误,Bundler无法继续。 请确保在打包之前成功执行gem install ffi -v '1.9.25'

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

当我运行 gem install ffi -v '1.9.25' 时,也会出现错误:

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

我尝试了很多在线解决方案,但无法解决这个问题。 似乎是因为我的系统有问题,因为我是团队中的新成员,其他开发者无法帮助我,因为他们没有遇到过这种问题。


请查看以下链接,其中包含有关安装 ffi gem 时可能出现的错误的解决方法:https://dev59.com/qGsz5IYBdhLWcg3wg4Cv。 - mrzasa
一般提示:您缺少一些本地依赖项(库),需要安装它们。您不需要更改gemfile,只需运行gem install ffi -v '1.9.25'来测试是否正常(就像您所做的那样)。 - mrzasa
就像我上面展示的一样,这样做总是会得到相同的错误。请检查我的问题的最后一部分。 - Jakub
安装错误:gem install ffi -v '1.9.25' 正在构建本地扩展,这可能需要一些时间... 错误:无法安装ffi: 错误:无法构建宝石原生扩展。 - Jakub
好的,但是如果不解决这个问题,我就无法打包并处理我所拥有的任务,我尝试了很多方法 :( - Jakub
显示剩余4条评论
3个回答

16

我使用以下命令成功安装了ffi:

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

发现于某个日本论坛


2
这对我在OSX 10.15.2上使用Ruby 2.7.0和ffi 1.11.3有效。 - turboladen
2
如果您正在使用brew run brew info libffi在您的计算机上查找LDFLAGS和PKG_CONFIG_PATH。 - rlawrenz

1
根据libffi README,macOS上只有GCC经过测试。您正在使用不支持命令行选项-print-multi-os-directory的Clang。
您需要修补libffi以使其与Clang配合使用,或者使用GCC。

1

你的错误是因为Clang(你正在使用的C编译器)不支持选项'-print-multi-os-directory'导致的。

请执行以下命令,检查X-Code命令行工具是否已完全安装:xcode-select --install

此外,您是否可以尝试运行brew install automake autoconf libtool libffi 来安装所需的依赖库?


xcode-select: 错误:命令行工具已经安装,请使用“软件更新”安装更新。所有东西都已经安装了。Brew 也已经安装完毕。 - Jakub
你是否已经安装了 automake、autoconf、libtool 和 libffi? - Armand Fardeau
是的,所有都已安装。 警告:automake 1.16.1_1 已经安装并且是最新的。 要重新安装 1.16.1_1,请运行 brew reinstall automake。 警告:autoconf 2.69 已经安装并且是最新的。 要重新安装 2.69,请运行 brew reinstall autoconf。 警告:libtool 2.4.6_1 已经安装并且是最新的。 要重新安装 2.4.6_1,请运行 brew reinstall libtool。 警告:libffi 3.2.1 已经安装并且是最新的。 要重新安装 3.2.1,请运行 brew reinstall libffi - Jakub
那么也许你需要尝试使用brew install gcc安装GCC。有关如何配置它的更多说明:https://dev59.com/UV4b5IYBdhLWcg3wiiV4#28982564 - Armand Fardeau
抱歉我无法帮助你,我在某个地方读到使用另一个可能会解决你的问题。 - Armand Fardeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接