2015年9月30日 星期三

使用 RVM 安裝 rails 出現找不到函式庫的錯誤

作業系統:Lubuntu 14.04

錯誤內容如下:
mattias@mattias-Desktop:~$ gem install rails
Fetching: thread_safe-0.3.5.gem (100%)
Successfully installed thread_safe-0.3.5
Fetching: minitest-5.8.1.gem (100%)
Successfully installed minitest-5.8.1
Fetching: tzinfo-1.2.2.gem (100%)
Successfully installed tzinfo-1.2.2
Fetching: i18n-0.7.0.gem (100%)
Successfully installed i18n-0.7.0
Fetching: activesupport-4.2.4.gem (100%)
Successfully installed activesupport-4.2.4
Fetching: rails-deprecated_sanitizer-1.0.3.gem (100%)
Successfully installed rails-deprecated_sanitizer-1.0.3
Fetching: mini_portile-0.6.2.gem (100%)
Successfully installed mini_portile-0.6.2
Fetching: nokogiri-1.6.6.2.gem (100%)
Building native extensions.  This could take a while...
ERROR:  Error installing rails:
 ERROR: Failed to build gem native extension.

    /home/mattias/.rvm/rubies/ruby-2.2.3/bin/ruby -r ./siteconf20150930-14059-do0e7v.rb extconf.rb
checking if the C compiler accepts ... *** 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=/home/mattias/.rvm/rubies/ruby-2.2.3/bin/$(RUBY_BASE_NAME)
 --help
 --clean
/home/mattias/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/mkmf.rb:456:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
 from /home/mattias/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/mkmf.rb:571:in `block in try_compile'
 from /home/mattias/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/mkmf.rb:522:in `with_werror'
 from /home/mattias/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/mkmf.rb:571:in `try_compile'
 from extconf.rb:80:in `nokogiri_try_compile'
 from extconf.rb:87:in `block in add_cflags'
 from /home/mattias/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/mkmf.rb:619:in `with_cflags'
 from extconf.rb:86:in `add_cflags'
 from extconf.rb:337:in `
' extconf failed, exit code 1 Gem files will remain installed in /home/mattias/.rvm/gems/ruby-2.2.3/gems/nokogiri-1.6.6.2 for inspection. Results logged to /home/mattias/.rvm/gems/ruby-2.2.3/extensions/x86_64-linux/2.2.0/nokogiri-1.6.6.2/gem_make.out

其中有一句寫到 "Check the mkmf.log file for more details.",那就來找出這支檔案看一下到底哪裡出問題了吧!
mattias@mattias-Desktop:~$ sudo find / -name mkmf.log
/home/mattias/.rvm/gems/ruby-2.2.3/extensions/x86_64-linux/2.2.0/nokogiri-1.6.6.2/mkmf.log

找到了,看看裡面說了什麼:
mattias@mattias-Desktop:~$ cat .rvm/gems/ruby-2.2.3/extensions/x86_64-linux/2.2.0/nokogiri-1.6.6.2/mkmf.log
"gcc -o conftest -I/home/mattias/.rvm/rubies/ruby-2.2.3/include/ruby-2.2.0/x86_64-linux -I/home/mattias/.rvm/rubies/ruby-2.2.3/include/ruby-2.2.0/ruby/backward -I/home/mattias/.rvm/rubies/ruby-2.2.3/include/ruby-2.2.0 -I.     -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -Wdeprecated-declarations -Wno-packed-bitfield-compat  -fPIC  conftest.c  -L. -L/home/mattias/.rvm/rubies/ruby-2.2.3/lib -Wl,-R/home/mattias/.rvm/rubies/ruby-2.2.3/lib -L. -fstack-protector -rdynamic -Wl,-export-dynamic     -Wl,-rpath,'/../lib' -Wl,-R'/../lib' -lruby  -lpthread -lgmp -ldl -lcrypt -lm   -lc "
/usr/bin/ld: cannot find -lgmp
collect2: error: ld returned 1 exit status
checked program was:
/* begin */
1: #include "ruby.h"
2: 
3: int main(int argc, char **argv)
4: {
5:   return 0;
6: }
/* end */

問題出在 "/usr/bin/ld: cannot find -lgmp"
找不到 gmp library,表示系統裡面沒有,那我們就來安裝一下吧:
sudo apt-get install libgmp-dev

安裝完後再繼續來安裝 rails:
gem install rails

呼!搞定收工!

沒有留言: