gem install - fatal error: 'ruby/config.h' file not found in Mojave

gem install - fatal error: 'ruby/config.h' file not found in Mojave

gem 在 MacOs Mojave 中安装失败。有什么可以帮助我解决这个问题的吗?我的 ruby 版本是 ruby 2.3.7p456

➜ sudo gem install json -v '1.8.3'



current directory: /Library/Ruby/Gems/2.3.0/gems/json-1.8.3/ext/json/ext/generator
make "DESTDIR="
compiling generator.c
In file included from generator.c:1:
In file included from ./../fbuffer/fbuffer.h:5:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/ruby.h:33:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/ruby/ruby.h:24:10: fatal error: 'ruby/config.h' file not found
#include "ruby/config.h"
         ^~~~~~~~~~~~~~~
1 error generated.
make: *** [generator.o] Error 1

make failed, exit code 2

如果您有 Xcode 10 beta 运行 这可能会解决问题

sudo xcode-select -s /Applications/Xcode-beta.app/Contents/Developer

我遇到了同样的问题,在包含 "ruby/config.h" 时由于失败而无法安装本机扩展。

我认为这个问题的原因是因为我使用的是与 Homebrew 一起安装的 ruby 版本。使用 Homebrew 升级到 Ruby 的新版本后,我看到了来自 Homebrew 的以下有用消息:

ruby is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have ruby first in your PATH run:
 echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.bash_profile

For compilers to find ruby you may need to set:
 export LDFLAGS="-L/usr/local/opt/ruby/lib"
 export CPPFLAGS="-I/usr/local/opt/ruby/include"

For pkg-config to find ruby you may need to set:
 export PKG_CONFIG_PATH="/usr/local/opt/ruby/lib/pkgconfig"

将以下行添加到我的 ~/.bash_profile 解决了我的问题:

export LDFLAGS="-L/usr/local/opt/ruby/lib"
export CPPFLAGS="-I/usr/local/opt/ruby/include"

我在尝试使用自制软件安装 fastlane 时遇到了这个问题。 None 前面提到的建议对我有帮助。手动安装 macOS_SDK_headers_for_macOS_10.14.pkg 修复了它。

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

Xcode 12 次升级把我搞砸了。

我从 brew 安装了 ruby 并将其添加到我的 .zshrc

export PATH="/usr/local/opt/ruby/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/ruby/lib"
export CPPFLAGS="-I/usr/local/opt/ruby/include"
export PKG_CONFIG_PATH="/usr/local/opt/ruby/lib/pkgconfig"

2021 年 3 月 15 日更新

According to Apple、Ruby 将不再包含在系统的未来版本中,因此使用 Ruby 版本管理器将是唯一的方法,一旦这实际上将发生了。


原回答

经过数小时的反复试验和错误后,我想更深入地了解这个错误的原因,我终于发现我认为这是解决这个问题的干净方法:

Catalina (NdMe: I think this started earlier, on Mojave) no longer supports including macOS headers in command line tools, they have to be explicitly used through Xcode SDK. You can do so by running gem through the xcrun tool like:

xcrun gem install <your_gem>

引自Github issue comment

xcrun gem install <your_gem> 对我有用,但我不得不多次这样做——每次 bundle install 都失败了。

最好的解决方案可能是在 .zshrc 文件中设置与 xcrun 相同的变量。 xcrun env 在我的系统上添加:

SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
CPATH=/usr/local/include
LIBRARY_PATH=/usr/local/lib

我在安装 Big Sur 后遇到了这个问题。我发现文件 ruby/config.h 不存在于我在升级前安装的 Xcode 版本的 Xcode 软件包中。我能够通过卸载 Xcode 版本并重新安装它们来更正它。

在 macOS Monterey 中(至少在 Beta 中),Ruby (ruby 2.6.3p62 (2019-04-16 revision 67580)) 仍然包括在内,但它似乎不能正常工作 ( fatal error: 'ruby/config.h' file not found),所以我 安装了我自己的 Ruby 版本。您可以手动安装 ruby,但我更喜欢使用 rbenv,一个 Ruby 版本管理器。


使用 rbenv

安装 ruby
  • 安装 rbenv: brew install rbenv ruby-build
    • ruby-buildrbenv实际安装ruby版本的插件,它提供ruby install命令。
  • Setup rbenv: rbenv init,(并按照其推荐的说明进行操作,例如,如果您使用的是 zsh,它表示将 eval "$(rbenv init -)" 添加到 ~/.zshrc)
  • 安装 ruby: rbenv install 3.0.1Latest version listed here
  • 做你来做的事情: sudo gem install cocoapodsbundle install

或手动安装ruby:

  • 运行 brew install ruby
  • 运行echo 'export PATH="/opt/homebrew/opt/ruby/bin:$PATH"' >> ~/.zshrc所以用的是这个版本
  • 重启终端

asdf?

rbenv 的替代方法是 asdf,但我发现 asdf 使用起来有点复杂,因为它不仅支持 ruby,还支持 NodeJS。我认为它 none 非常符合人体工程学。


注意:我有一个 M1 mac,它还在工作。