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

Tor*_*ben 35 ruby docker

我在Mac上更新了XCode,从那时起使用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
Run Code Online (Sandbox Code Playgroud)

我尝试用这个安装ruby:brew install rbenv ruby-build但这并没有改变任何东西.

有谁知道我怎么解决它?

谢谢!

rya*_*uen 59

没有其他解决方案对我有用,这是我为了解决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
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,macOS 10.14.6对我没有其他帮助。 (9认同)
  • 升级到Xcode 11后,这同样为我解决了此问题 (4认同)
  • 这非常适合10.14+ (3认同)
  • 这在macOS 10.14.6上帮了我大忙。 (3认同)
  • 我的问题是关于安装 cocoapods,这为我解决了这个问题。macOS 10.14.5 xcode 11.3.1 谢谢! (3认同)

tad*_*man 36

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

sudo xcode-select --install
Run Code Online (Sandbox Code Playgroud)

然后:

sudo xcodebuild -license
Run Code Online (Sandbox Code Playgroud)

  • 第一个命令足以让docker-sync-stack停止抱怨.实际上第二个命令失败了"xcode-select:error:tool'xcodebuild'需要Xcode,但是活动的开发人员目录'/ Library/Developer/CommandLineTools'是一个命令行工具实例" (5认同)

bdo*_*man 14

从Xcode 11开始,似乎不再包含ruby开发标头,因此您需要在Xcode Command Line Tools外部手动安装它们。

例如,我使用rbenv

rbenv install 2.6.4
rbenv global 2.6.4
eval "$(rbenv init -)"
Run Code Online (Sandbox Code Playgroud)

然后运行捆绑安装,一切按预期进行。


小智 14

对于Xcode 11,我也通过安装/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg软件包来解决此问题。


Sud*_*Plz 10

单行命令修复:

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

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
Run Code Online (Sandbox Code Playgroud)

它解决了这个问题。

  • 不适合我。系统提示我添加“-allowUntrusted”标志。但最终还是失败了。错误消息为“安装程序:安装失败(安装程序遇到错误,导致安装失败。请联系软件制造商寻求帮助。)” (2认同)

jok*_*oki 9

For Xcode 11 on macOS 10.14, this can happen even after installing Xcode and installing command-line tools and accepting the license with

sudo xcode-select --install
sudo xcodebuild -license accept
Run Code Online (Sandbox Code Playgroud)

The issue is that Xcode 11 ships the macOS 10.15 SDK which includes headers for ruby2.6, but not for macOS 10.14's ruby2.3. You can verify that this is your problem by running

ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'
Run Code Online (Sandbox Code Playgroud)

which on macOS 10.14 with Xcode 11 prints the non-existent path

/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
Run Code Online (Sandbox Code Playgroud)

However, Xcode 11 installs a macOS 10.14 SDK within /Library/Developer/CommandLineTools/SDKs/MacOS10.14.sdk. It isn't necessary to pollute the system directories by installing the old header files as suggested in other answers. Instead, by selecting that SDK, the appropriate ruby2.3 headers will be found:

sudo xcode-select --switch /Library/Developer/CommandLineTools
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'
Run Code Online (Sandbox Code Playgroud)

This should now correctly print

/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0
Run Code Online (Sandbox Code Playgroud)

Likewise, gem install should work while that SDK is selected.

To switch back to using the current Xcode 11 SDK, use

sudo xcode-select --switch /Applications/Xcode.app
Run Code Online (Sandbox Code Playgroud)

  • `$ xcrun --show-sdk-version` 给出 `xcodebuild:错误:无法找到 SDK“/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/”。xcrun:错误:无法在 SDK '/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/'` 中查找项目 'SDKVersion',我最终使用 @bdorfman 的 `rbenv` 解决方案 (3认同)
  • 很棒的解释,谢谢!同意正确答案。 (3认同)
  • 谢谢,最佳答案,因为它解释了原因,而不仅仅是删除一些要执行的命令。 (2认同)

Dua*_*yen 7

安装fastlane时遇到相同的问题。Tadman的答案是正确的,但命令行对Xcode 10.2.1不适用于我(我不确定其他版本)。您需要打开Xcode,然后打开“首选项”,选择“位置”,然后选择“命令行工具”。就我而言,“命令行工具”字段为空。


fno*_*rdl 7

正如@bdorfman在评论中所说,从Xcode 11版本开始,不再包含Ruby标头,但他们似乎试图为此尽快建立一个新版本(?):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 -)"
Run Code Online (Sandbox Code Playgroud)

但是,添加docker-sync新的红宝石版本需要额外的步骤。由于更改红宝石版本后(例如)

$ ruby -v
ruby 2.6.4p104 (2019-08-28 revision 67798) [x86_64-darwin18]
Run Code Online (Sandbox Code Playgroud)

然后运行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)
Run Code Online (Sandbox Code Playgroud)

(不包含docker-sync)

如果为docker-sync运行gem install,则将docker-sync用于rbenv托管的ruby。

$ gem install docker-sync