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


72

我在Mac上更新了XCode,从那时起,当docker-sync-stack start我使用Docker启动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但这不会改变任何内容。

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

谢谢!


2
我知道了-升级到Xcode 9后,还必须安装Xcode 9的命令行工具。
Torben

9
升级到Xcode 11 GM时遇到此问题。有人找到解决方案了吗?该sudo xcode-select --install命令说我已经安装了命令行工具。还尝试从开发人员下载中手动下载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
jdelaune19年

Answers:


175

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

3
$ 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
Miranda

3
很棒的解释,谢谢!同意正确答案。
Graystripe

2
谢谢,最好的答案,因为它解释了原因,而不仅仅是删除一些要执行的命令。
ernesto

1
接受许可证也帮助我安装了CocoaPods。谢谢。
andrewlundy

1
很棒的答案,这正是我安装CocoaPods的问题。非常感谢。
RadicalFish

136

没有其他解决方案对我有用,这是我为了解决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

15
谢谢,macOS 10.14.6对我没有其他帮助。
托尼

5
升级到Xcode 11后,这同样为我解决了该问题
Paul Popiel

1
Xcode 11和Mojave上的宝石安装包失败。这个答案使我感动。应该选择作为答案。
Bhaskar

1
这是唯一对我有用的东西。应该选择它作为答案。在找到此答案之前,我还尝试了该其他线程中的建议无济于事(stackoverflow.com/questions/26434642/…)。
watr

3
我的问题是关于安装可可豆,这对我来说很固定。macOS 10.14.5 xcode 11.3.1谢谢!
Chuck Taylor

35

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

sudo xcode-select --install

然后:

sudo xcodebuild -license

6
第一个命令足以使docker-sync-stack停止抱怨。实际上,第二个命令失败,并带有“ xcode-select:错误:工具'xcodebuild'需要Xcode,但活动的开发人员目录'/ Library / Developer / CommandLineTools'是命令行工具实例”
Motin

1
正如@Motin所说,似乎第二个命令不起作用,但是值得庆幸的是,没有必要docker-sync start停止抱怨。
约瑟夫·西弗斯

不幸的是,这对我来说还不够。
ryanpcmcquen

18

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

例如,我使用rbenv

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

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


最重要的是,这对我有用。我还想指出一点,通过添加rbenv我的CI工作流,我可以做出很大的改进(不再需要使用sudo安装捆绑器!)非常感谢@bdorfman
Tumata

1
由于某种原因,这对我不起作用。我什至尝试将“ 2.6.4”替换为“ 2.3.0”。当我查看时,/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/include尽管存在指向“ include”的路径,但没有目录。
Darrell Brogdon

谢谢,但是我不得不再次安装gem,因为docker-sync没有捆绑。@fnordl的回答对我有用。
nils petersohn19年

@DarrellBrogdon您的环境可能未正确设置。如果其正常运行,mkmf将不再寻找2.3,而是寻找您设置的哪个版本。如果路径仍然出现错误,/System/Library/Frameworks/Ruby.framework/Versions/2.3则表明您的环境仍在使用macOS系统ruby,而不是rbenv。
bdorfman

16

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


1
嘿,我没有这个档案。在哪里可以找到它?
nils petersohn19年

验证pkg在Sergey提供的路径中是否存在。从根目录检查路径。不在您的用户路径中。如果没有,您可以尝试首先安装命令行工具:xcode-select --install它应该显示出来。然后,一旦在该路径下安装了软件包,就可以像这样强制安装sudo installer -pkg macOS_SDK_headers_for_macOS_10.14.pkg -target /(从/ Library / Developer / CommandLineTools / Packages执行)
daveferrara1

15

单行命令修复:

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

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

它解决了这个问题。


这为我解决了问题。
鲁宾·马林

2
没为我工作。系统提示我添加-allowUntrusted标志。但是最后还是失败了。错误消息是installer: The install failed (The Installer encountered an error that caused the installation to fail. Contact the software manufacturer for assistance.)
Anthony Kong

7

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


1
经过几个小时的搜索,这对我有用。谢谢!
RoyB

非常感谢Man,这也对我有用。我的Xcode版本也是10.2.1
mendez7 '19

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 -)"

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

$ 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,则将docker-sync用于rbenv托管的ruby。

$ gem install docker-sync


3

如果您想对问题进行更深入的了解:

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/


2

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg在终端中运行会打开软件包安装向导。正确安装后,我就可以继续了。

MacOS 10.4.4

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.