Docker for Mac - mkmf.rb can't find header files for ruby

前端 未结 10 1792
一生所求
一生所求 2020-12-07 08:41

I updated XCode on my Mac and since then when starting Docker using docker-sync-stack start I get this error message:

mkmf.rb can\'t find header         


        
相关标签:
10条回答
  • 2020-12-07 08:49

    Running open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg in the terminal opens the package installation wizard. After properly installing was I able to proceed.

    MacOS 10.4.4

    0 讨论(0)
  • 2020-12-07 08:52

    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
    

    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"]'
    

    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
    

    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"]'
    

    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
    

    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
    
    0 讨论(0)
  • 2020-12-07 08:53

    I had the same problem while installing fastlane. The tadman's answer is correct, but the command lines don't work for me with Xcode 10.2.1 (I'm not sure with other versions). You need to open Xcode, then open Preferences, select Locations and choose Command Line Tools. In my case, Command Line Tools field is empty.

    0 讨论(0)
  • 2020-12-07 08:58

    None of the other solutions worked for me, here's what I ran to resolve the issue on 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
    
    0 讨论(0)
  • 2020-12-07 09:04

    As of Xcode 11, it seems like the ruby development headers are no longer included, so you will need to manually install them outside of Xcode Command Line Tools.

    E.g. for me using rbenv i did

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

    Then ran bundle install and everything worked as expected.

    0 讨论(0)
  • 2020-12-07 09:04

    As @bdorfman said in his comment, the Ruby headers are no longer included as of Xcode 11 build but they seem to try to make a new build for this as soon as possible (?): https://discuss.circleci.com/t/xcode-11-gm-seed-2-released/32505/12.

    What worked for me was to use rbenv like @bdorfman said:

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

    But with the extra step of adding docker-sync to your new ruby version. Since after you change the ruby version (for example)

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

    And then running gem list:

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

    (does not contains docker-sync)

    If you run the gem install for docker-sync you will use the docker-sync for your rbenv managed ruby.

    $ gem install docker-sync

    0 讨论(0)
提交回复
热议问题