macOS Mojave 'ruby/config.h' 文件未找到

Posted

技术标签:

【中文标题】macOS Mojave \'ruby/config.h\' 文件未找到【英文标题】:macOS Mojave 'ruby/config.h' file not foundmacOS Mojave 'ruby/config.h' 文件未找到 【发布时间】:2022-01-21 21:41:33 【问题描述】:

当我尝试在 macOS Mojave(10.14.1) 上使用 ruby​​ 支持 (--enable-rubyinterp) 构建 vim(8.1.0509) 时出现错误:

In file included from /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/ruby.h:33:
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/ruby/ruby.h:24:10: fatal error:
      'ruby/config.h' file not found
#include "ruby/config.h"

我已经安装了 Xcode 10.1。

xcode-select -p
/Applications/Xcode.app/Contents/Developer

谢谢

【问题讨论】:

【参考方案1】:

确保 Xcode 版本和 macOS 版本相互匹配:

macOS 10.15:Xcode macOS 11:Xcode >= 12.2, macOS 12:Xcode >= 13.1

这是因为在编译 gem 的本机扩展时,某些版本的 Xcode 没有运行它的操作系统的 macOS SDK。

【讨论】:

【参考方案2】:

在 macOS Catalina (10.15) 和 Big Sur (11.6) 上测试

在多次安装和卸载开发者工具后,这是唯一对我有用的东西。

首先安装 Ruby 版本管理器 rvm:

curl -L https://get.rvm.io | bash -s stable

然后安装最新版本的ruby:

rvm install ruby-3.0.3

然后将其设为默认值:

rvm --default use 3.0.3

(基于此答案:https://***.com/a/65033418/3605761)

额外

作为额外的好处,由于从过时的系统 Ruby 2 切换到当前版本 3,您将获得 up to 3 x better performance。

【讨论】:

确保您在安装后使用正确版本的 ruby​​:ruby --version 检查版本,rvm use 2.7.2 设置 工作!。谢谢 终于找到了这个可行的解决方案!我以前尝试过很多东西。非常感谢!这是我为这个场合找到的最好的虚拟拥抱:(っ^_^)っ 我在 Catalina 上,这为我解决了这个问题,在此之前我尝试了 rbenv 没有成功 这是为meee工作的【参考方案3】:

这不是 cocoa pod 问题,它与旧版本的 ruby​​ 有关。 只需按照以下步骤操作:

    rvm install "ruby-3.0.0" sudo gem 安装 cocoapods

【讨论】:

【参考方案4】:

这与您的 ruby​​ 版本或安装错误有关。 您可以使用 rvm 安装新的 ruby​​ 版本

首先使用以下命令安装 rvm

curl -L https://get.rvm.io | bash -s 稳定

然后关闭并重新打开终端或使用命令源[你的 mac bash 文件,如 .zshrc 或 .bashrrc] 来加载 rvm 命令

接下来使用以下命令安装新的 ruby​​ 版本

rvm 安装 ruby​​-2.7.2

现在你应该使用新版本的 ruby​​ 并安装最新版本的 cocoapods 执行以下步骤:

检查 ruby​​ 版本 使用 ruby​​ -v 命令检查 ruby​​ 版本 如果你的 ruby​​ 版本不是 2.7.2 使用 'rvm use 2.7.2' 命令切换 在新的红宝石上 然后使用“sudo gem install cocoapods”命令安装 cocoapods

使用'gem which cocoapods'命令检查新的pods版本。

【讨论】:

将新的 ruby​​ 设置为默认 ruby​​ 使用 'rvm --default use 2.7.2' 命令【参考方案5】:

我在安装 eventmachine 1.2.7 时遇到了类似的问题,这对我有用(macOS 10.15.5):

(我用fish

    brew install ruby 添加以下~/.config/fish/config.fish(没有fish,只需将这些添加到路径中)
      fish_add_path /usr/local/opt/ruby/bin fish_add_path /usr/local/lib/ruby/gems/3.0.0/bin
    set -gx CPPFLAGS "-I/usr/local/opt/ruby/include" set -gx LDFLAGS "-L/usr/local/opt/ruby/lib" set -gx PKG_CONFIG_PATH "/usr/local/opt/ruby/lib/pkgconfig" sudo gem install eventmachine -v '1.2.7' --source 'https://rubygems.org/'

通过 brew 安装 ruby​​ 后得到的 set -gx 命令。

我尝试重新安装 Xcode 工具(12.3,因为我还不能升级到 Big Sur)并重新接受协议,但这并没有改变任何事情


请注意,这是来自安装 eventmachine 1.2.7。我得到的日志错误将此路径作为其标志之一:

-I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0 -I

请注意,它试图查看 .../MacOSX11.1.sdk/...,但我有 10.15.5。即使手动设置CPPFLAGS, LDFLAGS, PKG_CONFIG_PATH 也不起作用,因为我使用的是系统红宝石或rbenv 拥有的任何东西,但我太沮丧了,无法深入挖掘那个特定的兔子洞。所以,我用 brew 的 ruby​​ 重新安装了!

【讨论】:

【参考方案6】:

2021 年建议 如果可以的话,更新到 macOS Big Sur 然后更新 Xcode 也可以解决这个问题。

刚刚测试了更新 10.15 -> macOS 的 11.2.3。 Xcode 12.4。

【讨论】:

在我拥有的至少两台不同的 Mac 上,仅仅升级 macOS 实际上对我不起作用。 @JongwookChoi 您还需要更新 Xcode,因为这对 Ruby 脚本有作用或至少指向“正确”区域【参考方案7】:

在 macOS Catalina 上 如果安装了多个版本的 xcode,xcode12/xcode12.4 等。请尝试在 xcode 首选项中更改您的 xcode 命令行工具。它可能有效!!!

【讨论】:

在大苏尔也为我工作过。谢谢。【参考方案8】:

我尝试了以上所有方法,最终我成功地使用了这个小“宝石”,请原谅双关语。

sudo gem install -n /usr/local/bin cocoapods -v 1.8.4

来自https://developer.apple.com/forums/thread/668456

【讨论】:

【参考方案9】:

在我的情况下(Catalina 10.15.7)只需重新安装 rubyhomebrew 即可修复它。无需安装rvmrubyenv

【讨论】:

注意:Homebrew ruby​​ 与系统 ruby​​ 是“不同的”,为其他下游构建过程指向“正确”的 ruby​​ 可能会很棘手。例如,自制程序拒绝链接 macOS 提供的 ruby​​,因此您需要正确配置 PATH、LDFLAGS、CPPFLAGS 和 pkgconfig,这通常会变得一团糟,并且不会像预期的那样顺利运行。【参考方案10】:

Catalina、Big Sur 等(截至 2020 年和 2021 年)

macOS 和 Xcode 的最新版本(例如 Catalina 10.15 和 Xcode 12.2)肯定有这个问题。重新安装 Xcode 和 xcode-select --install 对我一点帮助都没有(已经发布的解决方案似乎已经过时了)。我不想使用rvm,因为它可能会导致一些烦人的问题。

我通过手动创建符号链接做了一个解决方法:

cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/ruby
ln -sf ../../../../Headers/ruby/config.h

ruby/config.h 可以在以下位置找到: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/Headers/ruby/config.h.

您应该根据您当前的 xcode 安装更改 SDK 版本(例如上例中的 11.1)。

也很可能会遇到另一个错误,无法找到.../universal-darwin19/ruby/config.h (Commonmarker gem cannot be installed (needed for jekyll) macos)。可以按如下方式快速修复:

cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0
ln -sf universal-darwin20 universal-darwin19

【讨论】:

我只能在我的路径中看到 univeral-darwin20。我还能跑吗ln -sf universal-darwin20 univeral-darwin19 是的,这就是您需要运行命令以将符号链接 universal-darwin19universal-darwin20 的原因(请注意 universal-darwin19 周围的拼写错误;感谢 Ewan 修复原始答案)。 尝试安装rbenv。尝试卸载并重新安装xcode tools。但只有这个解决方案有效。虽然,我正在认真考虑备份所有内容并在所有这些之后重置我的机器 在我结束这个答案之前,我浪费了 3 个小时无济于事!非常感谢! 我在 Xcode 13 测试版中遇到了一个非常相似的问题(不是使用 vim,而是使用不同的项目)。看起来这些文件现在位于 Xcode 13 的 universal-darwin21 文件夹中,因此我必须将命令更新为 ln -sf universal-darwin21 universal-darwin19 并添加 ln -sf universal-darwin21 universal-darwin20 以构建我的项目。【参考方案11】:

对我来说,它工作“rvm install ruby​​”(不使用 brew),然后从 here 执行步骤:

$ sudo rm -rf /Library/Developer/CommandLineTools
$ xcode-select --install

然后

export PKG_CONFIG_PATH="/usr/local/opt/ruby/lib/pkgconfig" 

在这一切之后,它奏效了。

【讨论】:

【参考方案12】:

我正在使用 rbenv(在 Catalina 上),我在这里(或其他地方)找到的解决方案都没有为我工作。最终修复我的环境的原因是将 rbenv global 指向特定版本的 ruby​​ 而不是 system

$ rbenv global 2.6.3

这是 gem install 失败时我的环境的状态:

$ gem env home
=> /Users/ryanc/.gem

$ which gem
=> /Users/ryanc/.rbenv/shims/gem

$ which ruby
=> /Users/ryanc/.rbenv/shims/ruby

$ ruby -v
=> ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19]

$ rbenv local
=> rbenv: no local version configured for this directory

$ rbenv global
=> system

$ rbenv which ruby
=> /usr/bin/ruby

rbenv which ruby 的结果是关键。我决定运行rbenv global 2.6.3,突然我可以再次安装gems。这是新的状态:

$ ruby -v
=> ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin19]

$ rbenv global
=> 2.6.3

$ rbenv which ruby
=> /Users/ryanc/.rbenv/versions/2.6.3/bin/ruby

【讨论】:

【参考方案13】:

如果您在 Mac Big Sur 中遇到此问题,重新安装 CommandLineTools 可以解决此问题。

sudo rm -rf /Library/Developer/CommandLineTools

xcode-select --install

【讨论】:

是的,这是可行的最短解决方案(大苏尔)【参考方案14】:

MacOS Big Sur Beta 8

试试这个:

    安装 rbenv

git clone https://github.com/rbenv/rbenv.git ~/.rbenv

cd ~/.rbenv && src/configure && make -C src

将 ~/.rbenv/bin 添加到您的 $PATH 以访问 rbenv 命令行实用程序。 见:https://github.com/rbenv/rbenv#basic-github-checkout

确保 export PATH="$HOME/.rbenv/shims:$PATH" 已添加到您的 $PATH

    xcode-select --switch /Applications/Xcode.app/Contents/Develope

    gem install cocoapods 应该像魅力一样工作!

【讨论】:

这并没有解决我的问题,但 18 年 11 月 20 日的问题解决了。【参考方案15】:

macOS 卡塔利娜

问题在 Catalina 中再次出现,我无法在 Developer SDK 中发现此包。在找到更好的解决方案之前,我可以使用 ruby​​env 解决这个问题:https://github.com/orta/cocoapods-keys/issues/198#issuecomment-510909030

brew install rbenv ruby-build
echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile 
rbenv install 2.6.3
rbenv global 2.6.3

莫哈韦及以上

这个答案帮助了我:https://***.com/a/53194299/2105993

xcode-select --install
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

【讨论】:

这应该是公认的答案@maksimr,因为它确实可以解决问题而无需完全重新安装 macOS 我在 mojave 上,这为我修复了它(而 xcode-select --install 没有) 似乎很有希望,直到出现以下警告:“此软件包与此版本的 macOS 不兼容,可能无法安装。[...] 可能会损坏您的系统 [...]”。我只是想试试 asdf (github.com/asdf-vm/asdf),它的模块列表中似乎有 ruby​​。 使用 asdf ruby​​,gem 想将软件包安装到 ruby​​ 2.3 系统文件夹中,所以我停止尝试。这似乎是错误的,我不想使用 sudo。 Homebrew 有 ruby​​,当使用其 gem 实用程序的完整路径运行时,由于默认情况下未激活,因此可以安装我有问题的 gem(没有 sudo,是的)。 对我来说brew install ruby,然后export PKG_CONFIG_PATH="/usr/local/opt/ruby/lib/pkgconfig" 解决了这个问题(这是sudo gem install eventmachine -v '1.2.7'【参考方案16】:

我遇到了完全相同的问题。无法安装带有本机扩展的 gem。跑步

$ open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

失败,因为文件不存在。看起来 Mojave 可以破坏命令行工具。

我通过删除 Xcode 命令行工具来修复它,再次安装它们,然后安装缺少的标头:

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

【讨论】:

【参考方案17】:

我的问题不同于 - Yosemite upgrade broke ruby.h

正如您在问题描述中看到的,它是 System 的 ruby​​,而不是 Xcode 的 ruby​​,因此重新安装 Xcode 或符号链接在这里没有帮助。

答案: 我有reinstalled macOS Mojave 没有丢失任何数据,这解决了问题。

【讨论】:

我在尝试为 macvim 安装 Command-T 时遇到了这个问题,并担心我需要放弃重新安装 Mojave 的重磅炸弹。相反,我发现 System ruby​​ 实际上是 Ruby 2.3.7(Macvim 是针对这个 System ruby​​ 构建的,版本 2.3.7),我使用 rbenv 安装了 ruby​​ 2.3.7。一旦安装并设置为我的默认 ruby​​,我就可以像平常一样安装 Command-T。可能仍然需要考虑在以后重新安装 Mojave,但是通过 rbenv 安装 Ruby 2.3.7 帮助我在不这样做的情况下运行。我希望这可以帮助遇到这种情况的其他人。 ReDetection 解决方案有效,我也使用了 Systems Ruby。我的意思是这就是下载的目的吗? Mac OS X 的标头。 在我的情况下 /Library/Developer/CommandLineTools 不包含 Packages 文件夹。正如我上面写的,重新安装 Mojave 是一个解决方案(您可以重新安装它而不会丢失数据)

以上是关于macOS Mojave 'ruby/config.h' 文件未找到的主要内容,如果未能解决你的问题,请参考以下文章

如何在 macOS 10.14.4 Mojave 上使用 fink

将MacOS Catalina 降级为 Mojave

markdown macOS Mojave(Dev)

macOS Mojave:从 High Sierra 更新到 Mojave 后,活动开发者路径无效

如何将MacOS Catalina降级为Mojave

麻烦在 MacOS Mojave 上安装 pymssql