新手问题 安装 Rails 提示:configure: error: cannot guess build type; you must specify one

killernova · 2016年01月10日 · 最后由 riskgod 回复于 2016年03月08日 · 5962 次阅读

问题描述:

  • 以前已经安装的 rails 都是可以正常运行的,比如用 rvm 安装的 2.2.2,rails 的版本是 4.2.5,正常运行
  • 通过 rvm 安装的 ruby 版本,若未安装 rails,则安装 rails 时报错
  • 第一次发现这个问题时大约 4 天前,用 rvm 安装了 2.3.0,安装成功后,尝试安装 rails,报错

详细错误:

Running 'configure' for libxml2 2.9.2... ERROR, review '/Users/killernova/.rvm/gems/ruby-2.2.0/gems/nokogiri-1.6.7.1/ext/nokogiri/tmp/x86_64-apple-darwin15/ports/libxml2/2.9.2/configure.log' to see what happened. Last lines are:
========================================================================
: command not foundem type... ./config.guess: line 4:
: command not founde 6:
: command not founde 33:
: command not founde 34:
: command not founde 36:
: command not founde 48:
: command not founde 57:
: command not founde 60:
'/config.guess: line 63: syntax error near unexpected token `in
'/config.guess: line 63: `  case $1 in
configure: error: cannot guess build type; you must specify one
========================================================================
*** 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
    --without-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=/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
    --help
    --clean
    --use-system-libraries
    --enable-static
    --disable-static
    --with-zlib-dir
    --without-zlib-dir
    --with-zlib-include
    --without-zlib-include=${zlib-dir}/include
    --with-zlib-lib
    --without-zlib-lib=${zlib-dir}/lib
    --enable-cross-build
    --disable-cross-build
/Library/Ruby/Gems/2.0.0/gems/mini_portile2-2.0.0/lib/mini_portile2/mini_portile.rb:366:in `block in execute': Failed to complete configure task (RuntimeError)
    from /Library/Ruby/Gems/2.0.0/gems/mini_portile2-2.0.0/lib/mini_portile2/mini_portile.rb:337:in `chdir'
    from /Library/Ruby/Gems/2.0.0/gems/mini_portile2-2.0.0/lib/mini_portile2/mini_portile.rb:337:in `execute'
    from /Library/Ruby/Gems/2.0.0/gems/mini_portile2-2.0.0/lib/mini_portile2/mini_portile.rb:106:in `configure'
    from /Library/Ruby/Gems/2.0.0/gems/mini_portile2-2.0.0/lib/mini_portile2/mini_portile.rb:149:in `cook'
    from extconf.rb:289:in `block (2 levels) in process_recipe'
    from extconf.rb:182:in `block in chdir_for_build'
    from extconf.rb:181:in `chdir'
    from extconf.rb:181:in `chdir_for_build'
    from extconf.rb:288:in `block in process_recipe'
    from extconf.rb:187:in `tap'
    from extconf.rb:187:in `process_recipe'
    from extconf.rb:478:in `<main>'
mkmf.log
"xcrun clang -o conftest -I/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/include/ruby-2.0.0/universal-darwin15 -I/System/Library/Frame    works/Ruby.framework/Versions/2.0/usr/include/ruby-2.0.0/ruby/backward -I/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/include/ruby-2.    0.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT    -g -Os -pipe -DHAVE_GCC_SYNC_BUILTINS  conftest.c  -L. -L/Sys    tem/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib -L. -L/usr/local/lib   -arch x86_64 -arch i386   -lruby.2.0.0 -liconv -lpthread -ldl -lo    bjc  "
 94 checked program was:
 95 /* begin */
 96  1: #include "ruby.h"
 97  2:
 98  3: #include <stdlib.h>
 99  4: #include <iconv.h>
100  5:
101  6: int main(void)
102  7: {
103  8:     iconv_t cd = iconv_open("", "");
104  9:     iconv(cd, NULL, NULL, NULL, NULL);
105 10:     return EXIT_SUCCESS;
106 11: }
107 /* end */
google 搜索出来,一般都是这样说的:
search for /usr/share/automake*/config.guess

check the latest version of automake

$ which automake
$ automake --version
find the appropriate automake folder in /usr/share/automake.1.11.1/config.guess

replace config.guess from your build tree with /usr/share/automake.1.11.1/config.guess
但是我并不能找到这个文件, 类似的,找到的是:
/usr/lib/php/build/config.guess
/usr/local/Cellar/automake/1.15/share/automake-1.15/config.guess
/usr/local/Cellar/libtool/2.4.6/share/libtool/build-aux/config.guess

此外,还有说从网上下载 config.guess 和 config.sub 进行替换

假设是这这些 config.guess 中的一个,替换后请问该如何操作?如果不是这些问题引起的,请问到底是什么情况?谢谢。

============================分割线===========================

问题暂时解决了:

  • 报错的时候有提示是gem install nokogiri -- --use-system-libraries, 但不知道为什么我试了一次没用。
  • 然后刚我已经有 rails 的 ruby 版本中,新建了一个项目,bundle install 的时候又出现这个提示,我又按提示试了一次,然后就可以继续 bundle 了。
  • 于是我切换到 2.3.0 版本的 ruby,gem install rails, 照例提示错误,按提示gem install nokogiri -- --use-system-libraries,成功,gem install rails ,竟然成功了。。。

但肯定还是有问题的,每次运行 `gem install nokogiri -- --use-system-libraries`肯定不是办法,所以请各位帮忙看看到底问题出在哪里?

/Users/killernova/.rvm/gems/ruby-2.2.0/gems/nokogiri-1.6.7.1/ext/nokogiri/tmp/x86_64-apple-darwin15/ports/libxml2/2.9.2/configure.log

这个 log 你应该看看. 看第一条觉得应该是 libxml2 编译出的问题. brew install libxml2 以后再试? 我还是觉得 brew + rbenv + ruby-build 实在省心.

@chenjau 这个方法我试过,是可以安装成功的,并且提示 osx 自带该工具,无需安装。安装完毕,路径就是/usr/local/Cellar/libtool/2.4.6 , 不过 rails 依然无法安装,报错也是与之前一致的。

/usr/local/Cellar/automake/1.15/share/automake-1.15/config.guess 这个文件拷贝到你的编译目录下替换掉原来的 config.guess

@adamshen 嗯,我试过,但怀疑是不是我自己放错目录了? 另外,每个版本的 ruby 会生成特定的目录,那么岂不是每次安装 rails 都要拷贝一次?我想肯定是我哪里设置错了。

#4 楼 @killernova 用 gem env 看下当前设置

@adamshen

RubyGems Environment:
  - RUBYGEMS VERSION: 2.5.1
  - RUBY VERSION: 2.3.0 (2015-12-25 patchlevel 0) [x86_64-darwin15]
  - INSTALLATION DIRECTORY: /Users/killernova/.rvm/gems/ruby-2.3.0
  - USER INSTALLATION DIRECTORY: /Users/killernova/.gem/ruby/2.3.0
  - RUBY EXECUTABLE: /Users/killernova/.rvm/rubies/ruby-2.3.0/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/killernova/.rvm/gems/ruby-2.3.0/bin
  - SPEC CACHE DIRECTORY: /Users/killernova/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /Users/killernova/.rvm/rubies/ruby-2.3.0/etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-darwin-15
  - GEM PATHS:
     - /Users/killernova/.rvm/gems/ruby-2.3.0
     - /Users/killernova/.rvm/gems/ruby-2.3.0@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
     - :sources => ["https://ruby.taobao.org"]
  - REMOTE SOURCES:
     - https://ruby.taobao.org
  - SHELL PATH:
     - /Users/killernova/.rvm/gems/ruby-2.3.0/bin
     - /Users/killernova/.rvm/gems/ruby-2.3.0@global/bin
     - /Users/killernova/.rvm/rubies/ruby-2.3.0/bin
     - /Users/killernova/.rvm/bin
     - /usr/local/bin
     - /usr/bin
     - /bin
     - /usr/sbin
     - /sbin

看不出什么来我。。。

#6 楼 @killernova 好吧,我也不懂了。你当前的 Gem 安装目录是 /Users/killernova/.rvm/gems/ruby-2.3.0,为何上面会报/Users/killernova/.rvm/gems/ruby-2.2.0/gems/nokogiri-1.6.7 这个目录的错,难道你 gemfile 里含有 ruby 的版本号,一到目录下面就被 rvm 自动切成 2.2.0 了?

@adamshen 呃,不是,因为 2.2.0 的 ruby 被我用刚更新的方法给装上 rails 了,所以我切换到 2.3.0 给你看的。其他都是一样的,仅仅是版本号与路径是一一对应的。不好意思,刚没跟你说。

用 gemset 管理你的 gem, 然后 gem install rails

需要 登录 后方可回复, 如果你还没有账号请 注册新账号