MacOS 10.14更新至Mojave的方法

324 阅读2分钟

MacOS 10.14最近发布了,更新你的开发环境的操作系统可能是可怕的。通常情况下,我在更新之前会等待一段时间,以确保我不会失去生产力。我抱着试试看的态度进行了更新,结果遇到了一个奇怪的错误,一个库不见了。

如果你升级到Mojave,并试图安装一个像mini_racer 这样的宝石,你会遇到找不到库的问题。这是由于XCode 10删除了该库。然而,对此有一个简单的解决办法。

第一个迹象是,命令行工具没有安装。

Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /Users/kobaltz/.rvm/gems/ruby-2.4.4/gems/mini_racer-0.1.14/ext/mini_racer_extension /Users/kobaltz/.rvm/rubies/ruby-2.4.4/bin/ruby -r ./siteconf20180928-7580-5rhj67.rb extconf.rb checking for -lpthread... *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/Users/kobaltz/.rvm/rubies/ruby-2.4.4/bin/$(RUBY_BASE_NAME) --with-pthreadlib --without-pthreadlib /Users/kobaltz/.rvm/rubies/ruby-2.4.4/lib/ruby/2.4.0/mkmf.rb:457:in `try_do': The compiler failed to generate an executable file. (RuntimeError) You have to install development tools first.

确保XCode命令行工具已安装

xcode-select --install

那么,一切都应该正常工作......,不尽然。安装mini_racer 仍然失败。

Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /Users/kobaltz/.rvm/gems/ruby-2.4.4/gems/mini_racer-0.1.14/ext/mini_racer_extension /Users/kobaltz/.rvm/rubies/ruby-2.4.4/bin/ruby -r ./siteconf20180928-8233-1xwbzpf.rb extconf.rb checking for -lpthread... yes checking for -lobjc... yes creating Makefile current directory: /Users/kobaltz/.rvm/gems/ruby-2.4.4/gems/mini_racer-0.1.14/ext/mini_racer_extension make "DESTDIR=" clean current directory: /Users/kobaltz/.rvm/gems/ruby-2.4.4/gems/mini_racer-0.1.14/ext/mini_racer_extension make "DESTDIR=" compiling mini_racer_extension.cc clang: warning: argument unused during compilation: '-rdynamic' [-Wunused-command-line-argument] In file included from mini_racer_extension.cc:2: In file included from /Users/kobaltz/.rvm/rubies/ruby-2.4.4/include/ruby-2.4.0/ruby.h:33: In file included from /Users/kobaltz/.rvm/rubies/ruby-2.4.4/include/ruby-2.4.0/ruby/ruby.h:2012: /Users/kobaltz/.rvm/rubies/ruby-2.4.4/include/ruby-2.4.0/ruby/intern.h:47:19: warning: 'register' storage class specifier is deprecated and incompatible with C++17 [-Wdeprecated-register] void rb_mem_clear(register VALUE*, register long); ^~~~~~~~~ /Users/kobaltz/.rvm/rubies/ruby-2.4.4/include/ruby-2.4.0/ruby/intern.h:47:36: warning: 'register' storage class specifier is deprecated and incompatible with C++17 [-Wdeprecated-register] void rb_mem_clear(register VALUE*, register long); ^~~~~~~~~ 2 warnings generated. linking shared-object mini_racer_extension.bundle clang: warning: libstdc++ is deprecated; move to libc++ [-Wdeprecated] ld: library not found for -lstdc++ clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [mini_racer_extension.bundle] Error 1 make failed, exit code 2 Gem files will remain installed in /Users/kobaltz/.rvm/gems/ruby-2.4.4/gems/mini_racer-0.1.14 for inspection. Results logged to /Users/kobaltz/.rvm/gems/ruby-2.4.4/extensions/x86_64-darwin-17/2.4.0/mini_racer-0.1.14/gem_make.out An error occurred while installing mini_racer (0.1.14), and Bundler cannot continue. Make sure that `gem install mini_racer -v '0.1.14'` succeeds before bundling.

因此,错误ld: library not found for -lstdc++ ,这才是真正的错误所在。

为了解决这个问题,打开文件夹

open /Library/Developer/CommandLineTools/Packages/

运行软件包macOS_SDK_headers_for_macOS_10.14.pkg

然后gem install mini_racer ,就可以工作了

这个问题可能不仅仅与mini_racer 有关,因为它可能影响到任何编译扩展的宝石。