macOS Mojave 'ruby/config.h'文件未找到。

128
当我在 macOS Mojave(10.14.1) 上尝试使用 ruby 支持(--enable-rubyinterp) 编译 vim(8.1.0509) 时,出现错误:
In file included from /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/ruby.h:33:
/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"

我已经安装了Xcode 10.1。

xcode-select -p
/Applications/Xcode.app/Contents/Developer
26个回答

169
注意:这个解决方法有效,但你不能盲目地复制/粘贴路径。相反,看一下安装过程中给出的错误信息。它会说类似于:
“要查看为什么这个扩展无法编译,请检查这里的 mkmf.log 文件: /Library/Ruby/Gems/2.6.0/extensions/universal-darwin-21/2.6.0/ffi-1.15.5/mkmf.log”
所以打开它提到的日志文件,看看它找不到什么。它会告诉你正确的 MacOSX__._.sdkuniversal-darwin-__ 版本,你需要链接。
Catalina、Big Sur等(截至2020年、2021年、2022年和2023年)
更新:截至2023年,这个解决方法仍然有效。对于下面的命令,请根据你的 macOS 版本环境相应地更改版本字符串(例如,11.1、ruby 2.6、universal-darwin20等)。
最近的 macOS 和 Xcode 版本(例如 Catalina 10.15 和 Xcode 12.2)存在此问题。重新安装 Xcode 和 `xcode-select --install` 对我没有任何帮助(已经发布的解决方案似乎已过时)。我不想使用 `rvm`,因为它可能会引起一些烦人的问题。
我通过手动创建符号链接来解决了这个问题。
cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/ruby
ln -sf ../../../../Headers/ruby/config.h

可以在以下位置找到ruby/config.h文件: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/Headers/ruby/config.h

您应根据当前的Xcode安装情况相应更改SDK版本(例如上面的示例中的11.1)。

很可能还会遇到另一个错误,即找不到.../universal-darwin19/ruby/config.h文件(无法安装Commonmarker gem(用于jekyll)macos)。可以通过以下快速修复:

cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0
ln -sf universal-darwin20 universal-darwin19

如果在使用这个解决方法后,你在执行 pod install 时遇到崩溃,类似于以下错误信息:

/Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/library.rb:275: [BUG] Bus Error at 0x0000000100f38000

请参考这个解决方案

2
尝试安装rbenv。尝试卸载并重新安装xcode工具。但只有这个解决方案有效。尽管如此,我认真考虑在所有这些事情之后备份一切并重置我的机器。 - Sylvan D Ash
12
我在使用Xcode 13 beta时遇到了一个非常类似的问题(不是使用vim,而是另一个项目)。看起来文件现在位于Xcode 13的universal-darwin21文件夹中,因此我必须更新命令为ln -sf universal-darwin21 universal-darwin19,并且还要添加ln -sf universal-darwin21 universal-darwin20才能使我的项目构建成功。 - Kevin Johnson
6
这是一种不错的技巧,但为了更新和简化操作,可以执行以下步骤:
  1. 执行命令 cd $(xcode-select -p)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/include/ruby-2.*
  2. 查看您有哪些 universal-darwin*/ 目录(可能有多个),然后使用较低版本号(例如,20或21)创建符号链接,例如:sudo ln -s universal-darwin21 universal-darwin20
- Jerry101
5
做到了!非常感谢你。在我的BigSur上,我运行了cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/ruby/ 然后是 ´sudo ln -sf ../../../../Headers/ruby/config.h接着 cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0sudo ln -sf universal-darwin21 universal-darwin20` - jonashackt
4
最终的命令应该是ln -sf universal-darwin[x] universal-darwin[x-1],其中x是存在于.../include/ruby-2.6.0路径下的版本号。对于我来说,它是ln -sf universal-darwin22 universal-darwin21 - Grant Kamin
显示剩余6条评论

126

macOS Catalina

问题在Catalina中重新出现,我没有在开发者SDK中找到这个软件包。在找到更好的解决方案之前,我通过rubyenv进行了解决:https://github.com/orta/cocoapods-keys/issues/198#issuecomment-510909030

brew install rbenv ruby-build
echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile 
rbenv install 2.6.3
rbenv global 2.6.3

Mojave及更早版本

这个答案对我很有帮助:https://dev59.com/fF8d5IYBdhLWcg3wzEv4#53194299

xcode-select --install
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

4
应该接受@maksimr的答案,因为它恰好解决了问题,而无需完全重新安装macOS。 - ohcibi
1
看起来很有前途,直到出现警告:“此软件包与此版本的 macOS 不兼容,可能无法安装。[...] 可能会损坏您的系统[...]”。我将尝试使用 asdf(https://github.com/asdf-vm/asdf),它似乎在其模块列表中具有 Ruby。 - FooF
使用asdf ruby时,gem希望将软件包安装到ruby 2.3系统文件夹中,因此我停止了尝试。这似乎是错误的,而且我不想使用sudo。Homebrew有ruby,当使用完整路径运行其gem实用程序时,由于默认情况下未激活,我的问题gem可以被安装(无需sudo,耶)。 - FooF
第一个命令在我的情况下解决了问题。不确定它是否与第一个命令的当前工作方式有关,但在安装完成后没有.pkg文件供我打开。完成第一步后,此命令成功运行:sudo gem install cocoapods - 谢谢 - Gene Bo
2
对我来说,执行 brew install ruby,然后执行 export PKG_CONFIG_PATH="/usr/local/opt/ruby/lib/pkgconfig" 就解决了问题(问题是 sudo gem install eventmachine -v '1.2.7')。 - kino1

80

在macOS Catalina上
在多次安装和卸载开发者工具后,这是唯一对我有效的方法:

首先安装Ruby版本管理器rvm:

curl -L https://get.rvm.io | bash -s stable

然后安装最新版本的ruby:
rvm install ruby-2.7.2

最后再尝试安装CocoaPods:
sudo gem install cocoapods

(来自这个答案: https://dev59.com/7uk5XIcBkEYKwwoY3dX9#65033418)

编辑:在第二步中可能需要使用rvm reinstall ruby-2.7.2而不是rvm install ruby-2.7.2

编辑2:@greg-dubicki提到将ruby-2.7.2换成ruby-3.0.3:rvm install ruby-3.0.3,然后将其设置为默认值:rvm --default use 3.0.3。他们还提到:由于从过时的系统Ruby 2切换到当前版本3,您将获得最多3倍的性能提升。


3
安装完成后,请确保使用正确的 Ruby 版本:使用 ruby --version 命令检查版本,使用 rvm use 2.7.2 命令设置版本。 - Jack Ng
@greg-dubicki提到用ruby-3.0.3替换ruby-2.7.2:
rvm install ruby-3.0.3
然后将其设为默认版本:
rvm --default use 3.0.3 他们还提到:
由于从过时的系统Ruby 2切换到当前版本3,您将获得高达3倍的性能提升。
- Eden
1
谢谢!这是唯一适用于我的响应。使用 rvm use 3.1.0 更新到了 3.1.0 版本。 - plam
1
感谢您在2022年安装了rvm install ruby-3.1.2 - Sam
1
对于 Monterey xCode 14.2 运行,请执行以下命令:rvm install ruby-3.0.6 --with-openssl-dir=$(brew --prefix openssl@1.1) - AAber

22

如果您在Mac Big Sur遇到此问题,重新安装CommandLineTools可以解决此问题。

sudo rm -rf /Library/Developer/CommandLineTools

xcode-select --install

这花了很长时间并安装了一个较旧版本的CommandLineTools。也许这就是重点(!)但我没有意识到,让软件更新更新它,结果并没有解决问题。顶部答案中的符号链接方法起作用了,需要进行调整。 - Jerry101

20

我遇到了完全相同的问题。无法安装带有本地扩展的gem包。运行

$ open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

由于文件不存在,失败了。看起来Mojave可能会破坏命令行工具。

我通过删除Xcode命令行工具,重新安装它们,然后安装缺失的头文件来修复它:

$ sudo rm -rf /Library/Developer/CommandLineTools
$ xcode-select --install
$ open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

11
这是因为某些版本的Xcode在编译gem的本地扩展时,没有适用于其所运行的操作系统的macOS SDK。
确保Xcode版本和macOS版本相匹配:
- macOS 10.15:Xcode < 12.2 - macOS 11:Xcode >= 12.2,<= 13.0 - macOS 12:Xcode >= 13.1,<= 14.0 - macOS 13:Xcode >= 14.1,< 15.0 - macOS 14:Xcode >= 15.0
P.S. 我在 MacPorts 的文档中找到了一个类似的列表,可能更加更新。(在 https://www.macports.org/install.php 中搜索 13.1 或更高版本适用于 Monterey

3
似乎这是macOS Ventura的问题,需要Xcode 14.1。 - Gregory Conrad

5

在 macOS Catalina 上 如果安装了多个版本的 Xcode,如 xcode12/xcode12.4 等,请尝试在 Xcode 偏好设置中更改您的 Xcode 命令行工具。这可能有效!


4

嗨,使用这个命令我成功安装了CocoaPods 1.8.4。但是我需要升级版本。使用最新版本的代码又无法工作了!你能否提供一些建议? - Chayan C

3
我和Jongwook Choi做了类似的事情,以下环境和问题作为案例参考。
我使用的是macOS 12.6.2。当我尝试通过运行sudo gem install cocoapods来安装cocoapods时,出现了问题。
在阅读终端反馈中建议的日志并阅读其引用的源代码后,很明显这是macOS 12.6.2内置文件的一个错误。
在我的情况下,我按照以下步骤操作,成功安装了cocoapods。
原始错误
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.0.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/ruby.h:33:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.0.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/ruby/ruby.h:24:10: fatal error: 'ruby/config.h' file not found

动作 1

The file `config.h` is missing. So I build the symbolink in the folder 

cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.0.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/ruby/

sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/universal-darwin22/ruby/config.h

第二个指的是一个名为universal-darwin21的文件夹。 然而,我尝试使用uname -r并得到了21.6,所以我认为创建一个符号链接"universal-darwin21"来解决问题显然不会有影响。 原始错误
make: *** No rule to make target `/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.0.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/universal-darwin21/ruby/config.h', needed by `AbstractMemory.o'.  Stop.

动作 2

cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0

sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/universal-darwin22 universal-darwin21

安装成功后,如果查看日志文件/Library/Ruby/Gems/2.6.0/extensions/universal-darwin-21/2.6.0/ffi-1.15.5/gem_make.out,仍会输出一些警告。如果仔细研究这些警告,会发现缺少一些明显缺失的文件夹,这是系统文件/文件夹的问题,而不是用户操作有误。


2

2021建议
如果您可以的话,更新到macOS Big Sur,然后再更新Xcode也将解决此问题。

刚刚在更新macOS 10.15 -> 11.2.3和Xcode 12.4上进行了测试。


仅仅升级macOS对于我拥有的至少两台不同的Mac电脑并没有起作用。 - Jongwook Choi
@JongwookChoi 你需要更新Xcode,因为它会对Ruby脚本进行一些操作,或者至少指向“正确”的区域。 - thalacker

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