【问题标题】:Error while installing json gem 'mkmf.rb can't find header files for ruby'安装 json gem 时出错'mkmf.rb 找不到 ruby​​ 的头文件'
【发布时间】:2013-12-31 19:03:28
【问题描述】:

对于上下文,它位于具有防火墙的远程服务器上。我正在通过代理设置我的环境。我有ruby 1.8.7。当我尝试 gem install..

sudo gem install --http-proxy <host address>:<port> json

我收到以下错误:

Building native extensions.  This could take a while...
ERROR:  Error installing json:
        ERROR: Failed to build gem native extension.

/usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/ruby.h

Gem files will remain installed in /usr/lib64/ruby/gems/1.8/gems/json-1.8.1 for inspection.
Results logged to /usr/lib64/ruby/gems/1.8/gems/json-1.8.1/ext/json/ext/generator/gem_make.out

由于我不确定问题是什么,所以我搜索并找到了这些

有什么提示吗?谢谢!

【问题讨论】:

  • 检查/usr/lib/ruby/ruby.h 文件的存在,如果存在,向我们显示来自gem_make.out 的错误消息。

标签: json ruby rubygems


【解决方案1】:

之前您遵循 Joki 的回答(如下)和 IF 中的提示:

  • 你有 MacOS 10.14.6

  • 在 /Library/Developer/CommandLineTools/SDKs/ 你有文件夹 MacOSX.sdk(符号)、MacOSX10.14.sdk、MacOSX10.15.sdk

  • 将 MacOSX10.15.sdk 移动到任何地方(需要管理员权限)

  • 删除符号链接(需要管理员权限)

  • 现在在 /Library/Developer/CommandLineTools/SDKs/ 使用(需要管理员权限)创建另一个指向 MacOSX10.14.sdk 文件夹的符号链接

    sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk MacOSX.sdk

  • 现在你可以关注 Joki 的回答了

警告! 如果你再次将 MacOSX10.15.sdk 文件夹移动到 /Library/Developer/CommandLineTools/SDKs/,命令

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

将再次像默认一样显示 MacOSX10.15.sdk 文件夹,现在我不知道如何修复它!我的建议是,压缩文件夹并放置原始文件夹,直到修复可用为止。

【讨论】:

    【解决方案2】:

    我在使用 macOS 10.15 和 cocoapods 的 Xcode 12 上遇到了类似的问题。只需确保 xcode-select 命令指向您要构建的 SDK。之后它应该可以毫无问题地构建。

    【讨论】:

      【解决方案3】:

      现代更新,如stated by mimoralea:

      如果您使用的是 ruby​​ 2.0 或 2.2(感谢@patrick-davey)。

      sudo apt-get install ruby2.0-dev
      sudo apt-get install ruby2.2-dev
      sudo apt-get install ruby2.3-dev
      

      或者,通用方式:

      sudo apt-get install ruby-dev
      

      sudo apt-get install ruby`ruby -e 'puts RUBY_VERSION[/\d+\.\d+/]'`-dev
      

      您发布的第一个链接正是您的情况:没有安装 ruby​​ 开发环境。编译 ruby​​ 扩展需要开发环境,这些扩展大多是用C 编写的。代理与问题无关:一切正常下载,只是编译失败。

      我建议你在你的目标机器上安装ruby-devruby-devel 用于基于 rpm 的发行版)包。

      gcc 包可能也需要。

      试试:

      $ sudo apt-get install ruby-dev
      

      或者,对于 Redhat 发行版:

      $ sudo yum install ruby-devel
      

      或者,对于 [open]SuSE:

      $ sudo zypper install ruby-devel
      

      【讨论】:

      • 谢谢!我的意思是那个问题的答案似乎是特定于模块的。我认为不是ruby-dev 而是ruby-devel。在这里我找到了我真正需要的东西 - digitalocean.com/community/articles/…
      • 安装 ruby​​-devel(在 Fedora 20 上)后,出现错误 *** extconf.rb failed ***。按照您的建议安装 gcc 后,一切正常。
      • 你可以为openSUSE添加sudo zypper install ruby-devel
      • 不,这个答案无助于解决任何问题。正确答案是the one by mimoralea
      • 我注意到在 debian 上我必须安装 gcc 和 make
      【解决方案4】:

      在 Mac 10.14 上,头文件似乎没有安装在正确的位置。而不是像其他修复那样更改路径,我能够运行这个:

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

      按照说明操作,它为我解决了这个问题。

      【讨论】:

        【解决方案5】:

        对于 Ubuntu 18,在检查安装时提到的日志文件后

        结果记录到 /var/canvas/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/nio4r-2.5.2/gem_make.out

        less /var/canvas/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/nio4r-2.5.2/gem_make.out
        

        我注意到没有找到make。所以安装了make by

        sudo apt-get install make
        

        一切正常。

        【讨论】:

          【解决方案6】:

          Xcode -> 首选项 -> 位置

          将命令行工具更改为 Xcode 11.2.1

          【讨论】:

            【解决方案7】:

            对于 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 SDK,请使用

            sudo xcode-select --switch /Applications/Xcode.app
            

            【讨论】:

            • 传奇。正是我在 10.14.6 上的问题。悲伤不能投票两次。
            • 您,先生,是个默默无闻的知识霸主。非常感谢,
            • 如果您需要(或想要)为单个命令或脚本切换选择的 Xcode SDK,您可以使用 DEVELOPER_DIR 环境变量,如 xcode-select(1) 中所述。例如:DEVELOPER_DIR=/Library/Developer/CommandLineTools/ bundle install
            • ???? 总传奇
            • 你这该死的编码传奇。
            【解决方案8】:
            sudo apt-get --reinstall install ruby
            

            在 ubuntu 16.04 上试试

            【讨论】:

              【解决方案9】:

              Xcode 11 / macOS Catalina

              在 Xcode 11 / macOS Catalina 上,头文件不再位于旧位置,旧的 /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg 文件不再可用。

              相反,标头现在安装到当前 SDK 路径的 /usr/include 目录:

              /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
              

              使用xcrun --show-sdk-path 的输出可以找到该目录的大部分内容。如果你把这个路径添加到CPATH 环境变量中,那么构建脚本(包括那些通过bundle 调用的)一般都能找到它。

              我通过在我的.zshrc 文件中设置我的CPATH 解决了这个问题:

              export CPATH="$(xcrun --show-sdk-path)/usr/include"
              

              打开一个新的shell(或运行source .zshrc)后,我不再收到错误消息mkmf.rb can't find header files for ruby​​ at /usr/lib/ruby/ruby.h em> 并且 ruby​​gems 安装正确。

              关于构建到非 macOS 平台的注意事项

              如果您正在构建非 macOS 平台,例如 iOS/tvOS/watchOS,此更改将尝试在这些平台中包含 macOS SDK,从而导致构建错误。要解决,要么不要在登录时设置CPATH环境变量,要么在运行xcodebuild时暂时将其设置为空白,如下所示:

              CPATH="" xcodebuild --some-args
              

              【讨论】:

              • 您有关于 CPATH 的任何文档吗?设置它并不能解决我的问题。当我首先检查它的值时,它显示为未定义。
              • gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html - 根据您使用的语言/编译器,您可能需要找到不同的环境变量。默认不设置是正常的
              • 而且,如果你没有在其他地方看到过,Xcode 路径/名称中不能有空格
              • 从这里的所有答案中,这是唯一对我有用的解决方案。我在Mojave 10.14.6XCode 11.3.1。非常感谢,我花了 1 天时间解决这个问题:/
              【解决方案10】:

              您需要安装整个 ruby​​ 而不仅仅是最小的软件包。正确使用的命令是:

              sudo apt install ruby-full
              

              以下命令也不会安装完整的 ruby​​:

              sudo apt-get install ruby2.3-dev
              

              【讨论】:

                【解决方案11】:

                大多数投票的解决方案在我的机器上不起作用(linux mint 18.04)。 仔细一看,发现g++不见了。 解决了

                sudo apt-get install g++

                【讨论】:

                • 这在 Ubuntu 18.04 上对我有用。在 g++ 安装工作之前,我还必须执行 sudo apt-get install make。
                • 可以确认安装 makeg++ 也解决了我在 Ubuntu 18.04 上的问题!
                【解决方案12】:

                对于那些在 Mac OS X 上获得此功能的用户,您可能需要运行以下命令来安装 XCode 命令行工具,即使您已经安装了 XCode:

                sudo xcode-select --install
                

                您还必须通过运行以下命令同意 XCode 的条款和条件:

                sudo xcodebuild -license
                

                【讨论】:

                • 这对我来说是正确的答案。我没有 Ruby 开发头文件。一旦我安装了 xCode,我尝试运行的原始命令就起作用了。谢谢!
                • 在带有 Mojave 的 OSX 上,我必须将其运行为:su - $USER -c 'xcode-select --install'
                【解决方案13】:

                如果您使用的是 ruby​​ 2.0 或 2.2(感谢 @patrick-davey)或 2.3(感谢 @juanitofatas)。

                sudo apt-get install ruby-dev
                sudo apt-get install ruby2.0-dev
                sudo apt-get install ruby2.2-dev
                sudo apt-get install ruby2.3-dev
                

                你在这里得到了模式......

                【讨论】:

                • 或者,如果您使用的是 2.2 ... sudo apt-get install ruby2.2-dev
                • @patrick-davey E: Unable to locate package ruby2.2-dev E: Couldn't find any package by regex 'ruby2.2-dev'
                • @dson 可能您使用的是旧的 Ubuntu 版本。尝试升级。
                • 我也遇到了同样的错误,我使用的是 Linux Mint 的完全更新版本。我认为操作系统版本不是问题。
                • 如果您使用的是旧版本的 Ubuntu,例如 Trusty (14.04),请为 Ruby 添加亮盒 PPA:sudo apt-add-repository -y ppa:brightbox/ruby-ng &amp;&amp; sudo apt-get update &amp;&amp; sudo apt-get install -y ruby2.2-dev
                【解决方案14】:

                安装 ruby​​-devel 后可能需要安装 gcc

                【讨论】:

                  【解决方案15】:

                  我在使用 cygwin 运行以下命令时遇到了类似的问题:

                  $ gem install rerun
                  

                  我通过安装以下 cygwin 包解决了这个问题:

                  • ruby 开发
                  • libffi 开发
                  • gcc 核心
                  • gcc-g++
                  • 制作
                  • automake1.15

                  【讨论】:

                  • 这对我来说是段错误:/cygdrive/z/.gem/ruby/extensions/x86-cygwin/json-1.8.3/json/ext/parser.so: [BUG] Segmentation fault at 0x0001b8
                  • 通过执行rm -rf ~/.gem/ 并重新发出命令解决。
                  • ruby-dev 在树莓派上
                  【解决方案16】:

                  我也遇到了这个问题,因为我install Ruby on Ubuntu via brightbox,还以为ruby-dev是ruby的主干。所以我没有安装。安装 ruby​​2.3-dev 修复它:

                  sudo apt-get install ruby2.3-dev
                  

                  【讨论】:

                    【解决方案17】:

                    在 Fedora 21 及更高版本中,您只需打开一个终端并以 root 身份安装 Ruby 开发文件。

                    dnf install ruby-devel
                    

                    【讨论】:

                      【解决方案18】:

                      如果您使用 SUSE

                      sudo yast2 -i ruby-devel
                      

                      【讨论】:

                      • 我更喜欢sudo zypper in ruby-devel
                      猜你喜欢
                      • 2020-07-02
                      • 2011-05-22
                      • 2018-03-04
                      • 1970-01-01
                      • 2014-01-24
                      • 1970-01-01
                      • 1970-01-01
                      • 2022-06-24
                      • 1970-01-01
                      相关资源
                      最近更新 更多