一尘不染

Mac版Docker-mkmf.rb找不到ruby的头文件

docker

我在Mac上更新了XCode,从那时起使用Docker启动Docker时出现docker-sync-stack start以下错误消息:

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

我试着用以下方法安装ruby:brew install rbenv ruby-build但这不会改变任何东西。

有人知道我该如何解决吗?

谢谢!


阅读 430

收藏
2020-06-17

共1个答案

一尘不染

对于 macOS 10.14上的Xcode 11 ,即使在安装Xcode和安装命令行工具并通过以下方式接受许可后,也会发生这种情况:

sudo xcode-select --install
sudo xcodebuild -license accept

问题是Xcode 11附带了macOS 10.15 SDK,其中包含ruby2.6的标头,但不包含macOS
10.14的ruby2.3的标头。您可以通过运行来验证这是您的问题

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

在具有Xcode 11的macOS 10.14上显示 不存在的 路径

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0

但是,Xcode 11在中安装了macOS 10.14 SDK
/Library/Developer/CommandLineTools/SDKs/MacOS10.14.sdk。不必按照其他答案中的建议安装旧的头文件来污染系统目录。相反,通过选择该SDK,将找到适当的ruby2.3标头:

sudo xcode-select --switch /Library/Developer/CommandLineTools
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

现在应该可以正确打印

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

同样,gem install应该在选择该SDK时起作用。

要切换回使用当前的Xcode 11 SDK,请使用

sudo xcode-select --switch /Applications/Xcode.app
2020-06-17