2012-12-10 64 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