【问题标题】:Docker for Mac - mkmf.rb can't find header files for rubyDocker for Mac - mkmf.rb 找不到 ruby​​ 的头文件
【发布时间】:2018-03-04 19:08:30
【问题描述】:

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

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,但这并没有改变任何内容。

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

谢谢!

【问题讨论】:

  • 我想通了 - 升级到 Xcode 9 后,您还必须安装 Xcode 9 的命令行工具。
  • 升级到 Xcode 11 GM 时遇到此问题。有人找到解决方案吗? sudo xcode-select --install 命令说我已经安装了命令行工具。还尝试从 Developer Downloads 手动下载 Xcode 11 命令行工具。但我仍然收到错误mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/include/ruby.h

标签: ruby docker


【解决方案1】:

对于 ma​​cOS 10.14 上的 Xcode 11,即使在安装 Xcode 和安装命令行工具并接受许可之后,也可能发生这种情况

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

问题在于 Xcode 11 附带了 macOS 10.15 SDK,其中包含 ruby​​2.6 的标头,但不包含 macOS 10.14 的 ruby​​2.3 的标头。您可以通过运行验证这是您的问题

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

在带有 Xcode 11 的 macOS 10.14 上打印 non-existent 路径

/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 在/Library/Developer/CommandLineTools/SDKs/MacOS10.14.sdk 中安装了一个 macOS 10.14 SDK。没有必要按照其他答案中的建议通过安装旧的头文件来污染系统目录。相反,通过选择该 SDK,将找到相应的 ruby​​2.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

【讨论】:

  • $ xcrun --show-sdk-versionxcodebuild: error: SDK "/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/" cannot be located. xcrun: error: unable to lookup item 'SDKVersion' in SDK '/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/',我最终使用@bdorfman 的rbenv 解决方案
  • 很棒的解释,谢谢!同意正确答案。
  • 谢谢,最好的答案,因为它解释了原因,而不仅仅是删除一些要执行的命令。
  • 接受许可也帮助我安装了 CocoaPods。谢谢。
  • 很好的答案,这正是我安装 CocoaPods 的问题。非常感谢。
【解决方案2】:

其他解决方案都不适合我,这是我在 Mac OS 10.14.x 上运行以解决该问题的方法:

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

【讨论】:

  • 谢谢,macOS 10.14.6 对我没有任何帮助。
  • 这同样为我在升级到 Xcode 11 后解决了这个问题
  • Xcode 11 和 Mojave 上的 Gem 安装包失败。这个答案让我走了。应该被选为答案。
  • 这是唯一对我有用的东西。应该选择这个作为答案。在找到此答案之前,我还尝试了其他线程中的建议无济于事(stackoverflow.com/questions/26434642/…)。
  • 我的问题是关于安装 cocoapods,这为我解决了问题。 macOS 10.14.5 xcode 11.3.1 谢谢!
【解决方案3】:

升级 XCode 时,您需要安装命令行工具并另外接受条款和条件:

sudo xcode-select --install

然后:

sudo xcodebuild -license

【讨论】:

  • 第一个命令足以让 docker-sync-stack 停止抱怨。实际上第二个命令失败了“xcode-select:错误:工具'xcodebuild'需要Xcode,但活动开发者目录'/Library/Developer/CommandLineTools'是一个命令行工具实例”
  • 正如@Motin 所说,第二个命令似乎不起作用,但幸运的是,没有必要让docker-sync start 停止抱怨。
  • 不幸的是,这对我来说还不够。
【解决方案4】:

从 Xcode 11 开始,似乎不再包含 ruby​​ 开发头文件,因此您需要在 Xcode 命令行工具之外手动安装它们。

例如对我来说使用 rbenv 我做了

rbenv install 2.6.4
rbenv global 2.6.4
eval "$(rbenv init -)"

然后运行 ​​bundle install,一切都按预期运行。

【讨论】:

  • 最重要的是这对我有用。我还想指出,通过在我的 CI 工作流程中添加 rbenv 我能够做出很大的改进(不再需要使用 sudo 安装捆绑程序!)非常感谢@bdorfman
  • 由于某种原因这对我不起作用。我什至尝试用“2.3.0”替换“2.6.4”。当我查看时,没有/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/include 目录,尽管“包含”的路径确实存在。
  • 谢谢,但我不得不再次安装 gem,因为 docker-sync 没有任何东西可以捆绑。 @fnordl 的答案对我有用。
  • @DarrellBrogdon 您的环境可能设置不正确。如果它工作正常,mkmf 将不再寻找 2.3,它将寻找您设置的任何版本。如果您仍然收到路径 /System/Library/Frameworks/Ruby.framework/Versions/2.3 的错误,则表明您的 env 仍在使用 macOS 系统 ruby​​ 而不是 rbenv。
【解决方案5】:

对于 Xcode 11,我还安装了 /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg 包来解决此问题。

【讨论】:

  • 嘿,我没有这个文件。我在哪里可以找到它?
  • 验证 pkg 是否存在于 Sergey 提供的路径中。检查从根目录的路径。不在您的用户路径中。如果不存在,您可以尝试首先安装命令行工具:xcode-select --install,它应该会出现。然后,一旦你在该路径上安装了包,就强制安装sudo installer -pkg macOS_SDK_headers_for_macOS_10.14.pkg -target /(从 /Library/Developer/CommandLineTools/Packages 执行)
【解决方案6】:

单行命令修复:

在 OSX Mojave 上,我运行了以下命令:

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

它解决了这个问题。

【讨论】:

  • 这解决了我的问题。
  • 对我不起作用。系统提示我添加 -allowUntrusted 标志。但是最后还是失败了。错误信息是installer: The install failed (The Installer encountered an error that caused the installation to fail. Contact the software manufacturer for assistance.)
  • 在尝试了所有事情之后,你救了我的命,谢谢
【解决方案7】:

我在安装 fastlane 时遇到了同样的问题。 tadman 的回答是正确的,但命令行不适用于 Xcode 10.2.1(我不确定其他版本)。您需要打开 Xcode,然后打开 Preferences,选择 Locations 并选择 Command Line Tools。就我而言,命令行工具字段为空。

【讨论】:

  • 搜索了几个小时后,这对我有用。谢谢!
  • 非常感谢,这对我也有用。我的 Xcode 版本也是 10.2.1
【解决方案8】:

正如@bdorfman 在他的评论中所说,Ruby 标头在 Xcode 11 版本中不再包含,但他们似乎试图尽快为此创建一个新版本 (?):https://discuss.circleci.com/t/xcode-11-gm-seed-2-released/32505/12

对我有用的是使用rbenv 就像@bdorfman 所说:

rbenv install 2.6.4
rbenv global 2.6.4
eval "$(rbenv init -)"

但是需要将docker-sync 添加到新的 ruby​​ 版本的额外步骤。因为在你更改了 ruby​​ 版本之后(例如)

$ ruby -v
ruby 2.6.4p104 (2019-08-28 revision 67798) [x86_64-darwin18]

然后运行 ​​gem 列表:

$ gem list
bigdecimal (default: 1.4.1)
bundler (default: 1.17.2)
cmath (default: 1.0.0)
csv (default: 3.0.9)
date (default: 2.0.0)
dbm (default: 1.0.0)
did_you_mean (1.3.0)
e2mmap (default: 0.1.0)
etc (default: 1.0.1)
fcntl (default: 1.0.0)
fiddle (default: 1.0.0)
fileutils (default: 1.1.0)
forwardable (default: 1.2.0)
io-console (default: 0.4.7)
ipaddr (default: 1.2.2)
irb (default: 1.0.0)
json (default: 2.1.0)
logger (default: 1.3.0)
matrix (default: 0.1.0)
minitest (5.11.3)
mutex_m (default: 0.1.0)
net-telnet (0.2.0)
openssl (default: 2.1.2)
ostruct (default: 0.1.0)
power_assert (1.1.3)
prime (default: 0.1.0)
psych (default: 3.1.0)
rake (12.3.2)
rdoc (default: 6.1.2)
rexml (default: 3.1.9)
rss (default: 0.2.7)
scanf (default: 1.0.0)
sdbm (default: 1.0.0)
shell (default: 0.7)
stringio (default: 0.0.2)
strscan (default: 1.0.0)
sync (default: 0.5.0)
test-unit (3.2.9)
thwait (default: 0.1.0)
tracer (default: 0.1.0)
webrick (default: 1.4.2)
xmlrpc (0.3.0)
zlib (default: 1.0.0)

(不包含 docker-sync)

如果您为 docker-sync 运行 gem install,您将为您的 rbenv 托管 ruby​​ 使用 docker-sync。

$ gem install docker-sync

【讨论】:

    【解决方案9】:

    如果您想更深入地了解问题:

    Mac OS X 10.14 已停止将包含库放置在它们的 通常的位置,/usr/include,只将它们保存在 XCode 中 目录。

    要确认这是问题所在,只需运行ls /usr/include。如果 结果是空的,真的是这个问题。

    Apple 提供了一个“旧版安装程序”供您安装 “旧位置”中的标题。 要解决此问题,只需运行以下命令:

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

    https://silvae86.github.io/sysadmin/mac/osx/mojave/beta/libxml2/2018/07/05/fixing-missing-headers-for-homebrew-in-mac-osx-mojave/

    【讨论】:

      【解决方案10】:

      在终端中运行open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg 会打开包安装向导。正确安装后我能够继续。

      MacOS 10.4.4

      【讨论】:

        【解决方案11】:

        打开终端

        xcode-select --install
        sudo xcodebuild -license accept
        curl -L https://get.rvm.io | bash -s stable
        

        关闭并重新打开终端

        rvm install ruby-2.6
        
        sudo gem install cocoapods
        pod install 
        

        在android studio左上角项目完成右键点击Flutter -> Open IOS Module in Xcode

        【讨论】:

          猜你喜欢
          • 2011-05-22
          • 2020-07-02
          • 2013-12-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多