2012-12-10 63 views
4

我試圖在我的centos服務器上安裝therubyracer,我遇到了hella問題。無法在centos上安裝therubyracer(錯誤與V8和GCC)

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

     /usr/local/rvm/rubies/ruby-1.9.3-p125/bin/ruby extconf.rb 
checking for main() in -lpthread... yes 
checking for v8.h... no 
*** 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=/usr/local/rvm/rubies/ruby-1.9.3-p125/bin/ruby 
    --with-pthreadlib 
    --without-pthreadlib 
    --enable-debug 
    --disable-debug 
    --with-v8-dir 
    --without-v8-dir 
    --with-v8-include 
    --without-v8-include=${v8-dir}/include 
    --with-v8-lib 
    --without-v8-lib=${v8-dir}/lib 
/usr/local/rvm/gems/[email protected]/gems/therubyracer-0.11.0/ext/v8/build.rb:42:in `build_with_system_libv8': unable to locate libv8. Please see output for details (RuntimeError) 
    from extconf.rb:22:in `<main>' 
    The Ruby Racer requires libv8 ~> 3.11.8 
    to be present on your system in order to compile 
    and link, but it could not be found. 

    In order to resolve this, you will either need to manually 
    install an appropriate libv8 and make sure that this 
    build process can find it. If you install it into the 
    standard system path, then it should just be picked up 
    automatically. Otherwise, you'll have to pass some extra 
    flags to the build process as a hint. 

    If you don't want to bother with all that, there is a 
    rubygem that will do all this for you. You can add 
    following line to your Gemfile: 
     gem 'libv8', '~> 3.11.8' 

    We hope that helps, and we apologize, but now we have 
    to push the eject button on this install. 

    thanks, 
    The Mgmt. 



Gem files will remain installed in /usr/local/rvm/gems/[email protected]/gems/therubyracer-0.11.0 for inspection. 
Results logged to /usr/local/rvm/gems/[email protected]/gems/therubyracer-0.11.0/ext/v8/gem_make.out 

於是我嘗試安裝此:

[[email protected] current]# gem install libv8 
Building native extensions. This could take a while... 
ERROR: Error installing libv8: 
    ERROR: Failed to build gem native extension. 

     /usr/local/rvm/rubies/ruby-1.9.3-p125/bin/ruby extconf.rb 
creating Makefile 
which: no g++44 in (/usr/local/rvm/gems/ruby-1.9.3-p125/bin:/usr/local/rvm/gems/[email protected]/bin:/usr/local/rvm/rubies/ruby-1.9.3-p125/bin:/usr/local/rvm/gems/[email protected]/bin:/usr/local/rvm/gems/[email protected]/bin:/usr/local/rvm/rubies/ruby-1.9.3-p125/bin:/usr/local/rvm/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin) 
which: no g++46 in (/usr/local/rvm/gems/ruby-1.9.3-p125/bin:/usr/local/rvm/gems/[email protected]/bin:/usr/local/rvm/rubies/ruby-1.9.3-p125/bin:/usr/local/rvm/gems/[email protected]/bin:/usr/local/rvm/gems/[email protected]/bin:/usr/local/rvm/rubies/ruby-1.9.3-p125/bin:/usr/local/rvm/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin) 
which: no g++48 in (/usr/local/rvm/gems/ruby-1.9.3-p125/bin:/usr/local/rvm/gems/[email protected]/bin:/usr/local/rvm/rubies/ruby-1.9.3-p125/bin:/usr/local/rvm/gems/[email protected]/bin:/usr/local/rvm/gems/[email protected]/bin:/usr/local/rvm/rubies/ruby-1.9.3-p125/bin:/usr/local/rvm/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin) 
Unable to find a compiler officially supported by v8. 
It is recommended to use GCC v4.4 or higher 
Using compiler: g++ 
Traceback (most recent call last): 
    File "build/gyp/gyp", line 15, in ? 
    import gyp 
    File "build/gyp/pylib/gyp/__init__.py", line 8, in ? 
    import gyp.input 
    File "build/gyp/pylib/gyp/input.py", line 14, in ? 
    import gyp.common 
    File "build/gyp/pylib/gyp/common.py", line 375 
    with open(source_path) as source_file: 
      ^
SyntaxError: invalid syntax 
gmake: *** [out/Makefile.x64] Error 1 
GYP_GENERATORS=make \ 
    build/gyp/gyp --generator-output="out" build/all.gyp \ 
        -Ibuild/standalone.gypi --depth=. \ 
        -Dv8_target_arch=x64 \ 
        -S.x64 -Dhost_arch=x64 


Gem files will remain installed in /usr/local/rvm/gems/[email protected]/gems/libv8-3.11.8.4 for inspection. 
Results logged to /usr/local/rvm/gems/[email protected]/gems/libv8-3.11.8.4/ext/libv8/gem_make.out 
[[email protected] current]# 

的輸出,其中,G ++

$ which g++ 
/usr/bin/g++ 


    $ /usr/bin/g++ --version 
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-52) 
Copyright (C) 2006 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

[[email protected] current]# which g++ 
/usr/bin/g++ 
[[email protected] current]# which g++44 
/usr/bin/g++44 
[[email protected] current]# 

[[email protected] current]# cd /usr/bin/ 
[[email protected] bin]# ls -al g++* 
-rwxr-xr-x 4 root root 218432 May 10 2012 g++ 
-rwxr-xr-x 2 root root 263704 Feb 21 2012 g++44 
lrwxrwxrwx 1 root root  12 Dec 9 17:21 g++-4.4 -> /usr/bin/g++ 

信息你問:

[[email protected] node-v0.8.15]# which gcc 
/usr/bin/gcc 
[[email protected] node-v0.8.15]# which g++ 
/usr/bin/g++ 
[[email protected] node-v0.8.15]# which g++44 
/usr/bin/g++44 
[[email protected] node-v0.8.15]# ls -la /usr/bin/g++ 
-rwxr-xr-x 4 root root 218432 May 10 2012 /usr/bin/g++ 
[[email protected] node-v0.8.15]# 

編輯 使用@克里斯的解決方案之後,我現在得到libv8安裝,但therubyracer仍然沒有安裝,給我這樣的:

[[email protected] famnfo.com]# gem install therubyracer 
Fetching: therubyracer-0.11.0.gem (100%) 
Building native extensions. This could take a while... 
ERROR: Error installing therubyracer: 
    ERROR: Failed to build gem native extension. 

     /usr/local/rvm/rubies/ruby-1.9.3-p125/bin/ruby extconf.rb 
checking for main() in -lpthread... yes 
creating Makefile 

make 
compiling accessor.cc 
accessor.cc:181:2: warning: no newline at end of file 
compiling array.cc 
array.cc:26:2: warning: no newline at end of file 
compiling backref.cc 
backref.cc:45:2: warning: no newline at end of file 
compiling constants.cc 
constants.cc:34:2: warning: no newline at end of file 
compiling constraints.cc 
constraints.cc:52:2: warning: no newline at end of file 
compiling context.cc 
compiling date.cc 
date.cc:18:2: warning: no newline at end of file 
compiling exception.cc 
exception.cc:38:2: warning: no newline at end of file 
compiling external.cc 
external.cc:43:2: warning: no newline at end of file 
compiling function.cc 
function.cc:58:2: warning: no newline at end of file 
compiling gc.cc 
gc.cc:43:2: warning: no newline at end of file 
compiling handles.cc 
handles.cc:34:2: warning: no newline at end of file 
compiling heap.cc 
heap.cc:31:2: warning: no newline at end of file 
compiling init.cc 
init.cc:39:2: warning: no newline at end of file 
compiling invocation.cc 
invocation.cc:86:2: warning: no newline at end of file 
compiling locker.cc 
locker.cc:77:2: warning: no newline at end of file 
compiling message.cc 
message.cc:51:2: warning: no newline at end of file 
compiling object.cc 
object.cc:334:2: warning: no newline at end of file 
compiling primitive.cc 
primitive.cc:8:2: warning: no newline at end of file 
compiling rr.cc 
rr.cc:83:2: warning: no newline at end of file 
compiling script.cc 
script.cc:80:17: warning: no newline at end of file 
compiling signature.cc 
signature.cc:18:2: warning: no newline at end of file 
compiling stack.cc 
stack.cc:76:2: warning: no newline at end of file 
compiling string.cc 
string.cc:47:17: warning: no newline at end of file 
compiling template.cc 
template.cc:175:2: warning: no newline at end of file 
compiling trycatch.cc 
trycatch.cc:87:2: warning: no newline at end of file 
compiling v8.cc 
v8.cc:87:2: warning: no newline at end of file 
compiling value.cc 
value.cc:239:2: warning: no newline at end of file 
linking shared-object v8/init.so 
/usr/bin/ld:/usr/local/rvm/gems/ruby-1.9.3-p125/gems/libv8-3.11.8.3-x86_64-linux/vendor/v8/out/x64.release/obj.target/tools/gyp/libv8_base.a: file format not recognized; treating as linker script 
/usr/bin/ld:/usr/local/rvm/gems/ruby-1.9.3-p125/gems/libv8-3.11.8.3-x86_64-linux/vendor/v8/out/x64.release/obj.target/tools/gyp/libv8_base.a:1: syntax error 
collect2: ld returned 1 exit status 
make: *** [init.so] Error 1 


Gem files will remain installed in /usr/local/rvm/gems/ruby-1.9.3-p125/gems/therubyracer-0.11.0 for inspection. 
Results logged to /usr/local/rvm/gems/ruby-1.9.3-p125/gems/therubyracer-0.11.0/ext/v8/gem_make.out 
+0

感謝您的輸出......我現在正在給我的答案添加信息,所以請重新加載以查看它。 – joelparkerhenderson

+0

即使在我運行yum命令後,我的g ++版本也只有4.1.2。 – Catfish

+1

當我有[同樣的問題](http://stackoverflow.com/q/13090425/1068283),答案竟然是「使用Node.js」。 –

回答

8

libv8不能與Python 2.4安裝,因爲Centos的船隻。你至少需要Python 2.6來編譯它。

yum install python26 
ln -s /usr/bin/python26 /usr/local/bin/python 

更簡單地說,你可以從它的二進制包安裝libv8:

gem install libv8 --version=3.11.8.3 

這就是說,即便如此做,therubyracer可能會或可能不會即使安裝libv8安裝你可以做到這一點;我一直有零星的問題,但只在一些機器上,還沒有找出共同的根本原因。我使用這些機器上的node.js來編譯。

+0

'gem install libv8 --version = 3.11.8.3'運行良好,但'gem install therubyracer'仍然沒有像你說的那樣安裝。我現在確實得到了一個不同的錯誤。我會在問題的底部發表。 – Catfish

+0

您遇到與我無法安裝的安裝相同的問題。我沒有一個解決方案,即使在成功安裝libv8之後,仍然無法安裝therubyracer v0.11.0,我很抱歉地說。在週末的較好的一段時間裏,我猛撞了我的頭。一種替代方法是隻安裝gem install therubyracer --version = 0.10.2',但是它使用的是舊版本的libv8。如果可以接受的話,那應該安裝得很好。 –

+3

'gem install therubyracer --version = 0.10.2'效果很好。感謝您的幫助,因爲我現在在浪費了6小時之後即將恢復運行。 – Catfish