mkmf.rb can't find header files for ruby at...

Posted by Asingers Blog on March 1, 2020

由于 Xcode 11 路径的问题,导致可能 macOS 不是最新的 10.15 版本时候在执行gem install cocoapods 的时候报错。

1
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/include/ruby.h

请尝试以下步骤:

1
2
3
(1)sudo rm -rf /Library/Developer/CommandLineTools
(2)xcode-select --install
(3)sudo xcodebuild -license accept

问题主要是因为 Xcode 11 携带了 macOS 10.15 SDK,该 SDK 包含了 ruby 2.6 的头文件,但是对 macOS 10.14 系统的 ruby 2.3 却没有该文件,可以通过一下命令来验证问题

1
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

macOS 10.14 系统上,Xcode 11 版本安装的情况下会打印出这个不存在的路径

1
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/

Xcode 11 是安装在 macOS 10.14 SDK 上,在此路径/Library/Developer/CommandLineTools/SDKs/MacOS10.14.sdk 。但是它没有必要因为安装了旧的头文件而污染了系统目录。所以我们要改成,指定合适的 SDK 和 ruby 2.3 头文件:

1
sudo xcode-select --switch /Library/Developer/CommandLineTools

再来看下ruby 2.3的正确路径:

1
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

会输出一个正常的存在的路径:

1
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0

然后再次安装cocoapods 就可以了。

1
gem install cocoapods

当然这个🥚疼的步骤完全可以通过升级到最新的 macOS 😂.

文章使用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议