无法在 centos 上安装 therubyracer(V8 和 GCC 出错)

Posted

技术标签:

【中文标题】无法在 centos 上安装 therubyracer(V8 和 GCC 出错)【英文标题】:Unable to install therubyracer on centos (errors with V8 and GCC) 【发布时间】:2012-11-27 10:17:06 【问题描述】:

我正在尝试在我的 centos 服务器上安装 therubyracer,但遇到了很多问题。

$ 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/ruby-1.9.3-p125@famnfo/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/ruby-1.9.3-p125@famnfo/gems/therubyracer-0.11.0 for inspection.
Results logged to /usr/local/rvm/gems/ruby-1.9.3-p125@famnfo/gems/therubyracer-0.11.0/ext/v8/gem_make.out

然后我尝试安装这个:

[root@allthingswebdesign 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/ruby-1.9.3-p125@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p125/bin:/usr/local/rvm/gems/ruby-1.9.3-p125@famnfo/bin:/usr/local/rvm/gems/ruby-1.9.3-p125@global/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/ruby-1.9.3-p125@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p125/bin:/usr/local/rvm/gems/ruby-1.9.3-p125@famnfo/bin:/usr/local/rvm/gems/ruby-1.9.3-p125@global/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/ruby-1.9.3-p125@global/bin:/usr/local/rvm/rubies/ruby-1.9.3-p125/bin:/usr/local/rvm/gems/ruby-1.9.3-p125@famnfo/bin:/usr/local/rvm/gems/ruby-1.9.3-p125@global/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/ruby-1.9.3-p125@famnfo/gems/libv8-3.11.8.4 for inspection.
Results logged to /usr/local/rvm/gems/ruby-1.9.3-p125@famnfo/gems/libv8-3.11.8.4/ext/libv8/gem_make.out
[root@allthingswebdesign 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.

[root@allthingswebdesign current]# which g++
/usr/bin/g++
[root@allthingswebdesign current]# which g++44
/usr/bin/g++44
[root@allthingswebdesign current]# 

[root@allthingswebdesign current]# cd /usr/bin/
[root@allthingswebdesign 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++

您要求的信息:

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

编辑 使用@Chris 的解决方案后,我现在安装 libv8,但 therubyracer 仍然没有安装并给了我这个:

[root@allthingswebdesign 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

【问题讨论】:

感谢您的输出...我现在正在将信息添加到我的答案中,所以请重新加载以查看它。 即使我运行了你的 yum 命令,我的 g++ 版本也只有 4.1.2。 当我有the same question 时,答案竟然是“使用Node.js”。 @MichaelHampton 我会尝试,但我也不知道如何安装它。我找不到适用于 centos 的软件包,当我手动尝试时,我在尝试 ./configure 时遇到错误 节点的一个 q/a 在这里:serverfault.com/questions/299288/… 【参考方案1】:

libv8 安装失败,因为 Centos 附带 Python 2.4。你至少需要 Python 2.6 来编译它。你可以这样做:

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

更简单地说,你可以从它的二进制包中安装 libv8:

gem install libv8 --version=3.11.8.3

也就是说,即使这样做了,即使安装了 libv8,therubyracer 也可能安装也可能不安装;我一直有零星的问题,但只在某些机器上,还没有能够找出常见的根本原因。我已经求助于在这些机器上编译 node.js。

【讨论】:

好吧 gem install libv8 --version=3.11.8.3 工作得很好,但 gem install therubyracer 仍然没有像你说的那样安装。我现在确实得到了一个不同的错误。我将把它贴在问题的底部。 您在安装时遇到了与我一样的问题。即使在成功安装 libv8 后,我也没有解决 therubyracer v0.11.0 无法安装的解决方案,很抱歉。在周末的大部分时间里,我都用头撞它。一种替代方法是仅使用gem install therubyracer --version=0.10.2,但这是它使用的旧版本的 libv8。不过,如果可以接受,那应该可以正常安装。 gem install therubyracer --version=0.10.2 效果很好。感谢您的帮助,因为今天浪费了大约 6 个小时,我现在已经恢复正常运行了。 这很好用。谢谢。我卸载了 therubyracer 和 libv8,然后按照这些和 @Catfish 的帮助,我能够让我的应用程序再次启动并运行。谢谢

以上是关于无法在 centos 上安装 therubyracer(V8 和 GCC 出错)的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Mountain Lion 上安装 therubyracer -v '0.10.0'

无法在 Yosemite 的全新安装和 ruby​​ 的全新版本上安装 therubyracer

由于 Mac 上的编译器问题,无法安装 therubyracer gem?

gem 在 OSX 10.15 上安装 therubyracer -v 0.12.3

如何在 mac 上安装 therubyracer? “gem install therubyracer -v”不工作

heroku 上的 therubyracer 错误为“无法通过 Bundler 安装 gems”。