当前位置: 首页 > 面试题库 >

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

严兴言
2023-03-14
问题内容

我在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但这不会改变任何东西。

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

谢谢!


问题答案:

对于 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


 类似资料:
  • 我在Mac上更新了XCode,从那时起,当使用

  • 问题内容: 对于上下文,它位于具有防火墙的远程服务器上。我正在通过代理设置我的环境。我有。当我尝试gem install .. 我收到以下错误: 有什么提示吗?谢谢! 问题答案: 如mimoralea所述,现代更新: 如果您使用的是ruby 2.0或2.2(感谢@ patrick-davey)。 或者,通用方式: 要么 您发布的第一个链接 正是 您的情况:没有安装ruby开发环境。需要开发环境来编

  • 我得到以下错误: 因为我不确定是什么问题,我搜索了一下,发现了这些 > gem安装:未能构建gem本机扩展(找不到头文件)-这里的说明似乎是针对正在安装的gem的。

  • 我从Oracle下载了一个JDK,并尝试将其放入Unity的JDK路径。我看到一些帖子说你必须在JavaVirtualMachine中选择一个路径。但我在JavaVirtualMachine中找不到任何东西。我在终端中输入命令/usr/libexec/java_home,它显示给我的是-/library/java/javavirtualmachines/jdk-14.0.1.jdk/content

  • 我正在开发一个使用boost的项目,但由于一个神秘的原因,preproc没有找到boost头文件。 main.cpp和makefile在中 boost库在中 boost库(.a和.so)位于中

  • 导出路径=${PATH}:${ANT_HOME}/bin 导出java_home=$(/usr/libexec/java_home) 我这样做正确吗?