osx小牛上的“ gem安装therubyracer -v'0.10.2'”未安装


90

尝试使用“ gem install therubyracer -v'0.10.2'”在特立独行上安装therubyracer,但出现以下错误:

/Users/dennischen/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb
checking for main() in -lobjc... yes
creating Makefile

make
compiling rr.cpp
clang: warning: argument unused during compilation: '-rdynamic'
rr.cpp:48:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
1 warning generated.
compiling v8.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_array.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_callbacks.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_context.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_date.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_debug.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_exception.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_exception.cpp:10:16: warning: unused variable 'stack' [-Wunused-variable]
  static void* stack[20];
               ^
1 warning generated.
compiling v8_external.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_external.cpp:10:9: warning: unused variable 'references' [-Wunused-variable]
  VALUE references;
        ^
1 warning generated.
compiling v8_function.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_handle.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_locker.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_locker.cpp:45:5: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
v8_locker.cpp:85:5: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
2 warnings generated.
compiling v8_message.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_object.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_object.cpp:77:19: warning: unused variable 'proto' [-Wunused-variable]
    Handle<Value> proto(rr_rb2v8(prototype));
                  ^
1 warning generated.
compiling v8_script.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_string.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_template.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_try_catch.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_v8.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_value.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_value.cpp:100:9: warning: unused function 'ToInt32' [-Wunused-function]
  VALUE ToInt32(VALUE self) {
        ^
1 warning generated.
compiling v8_weakref.cpp
clang: warning: argument unused during compilation: '-rdynamic'
linking shared-object v8.bundle
clang: error: no such file or directory: '/Users/dennischen/.rvm/gems/ruby-1.9.3-p194@panini/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a'
make: *** [v8.bundle] Error 1

谁能帮我弄清楚如何使这种宝石起作用?我已经安装了命令行工具。


你有homebrew吗 尝试brew install v8在安装gem之前使用安装v8
Ivan Shamatov 2013年

我相信brew install v8是一个单独的问题。 有关带有brew的v8的详细信息,请参见stackoverflow.com/questions/11598655/therubyracer-install-error
Ash Blue

Answers:


242

如果您决定使用较新的therubyracergem版本,则将不再有此问题

除此以外:

brew tap homebrew/dupes # Thanks Tom
brew install apple-gcc42

export CC=/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2
export CXX=/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2
export CPP=/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2

brew uninstall v8

gem uninstall libv8

gem install therubyracer -v '0.10.2' # specify version

11
这种方法似乎比修改符号链接更好
Nilesh

3
brew tap homebrew/dupes修复了“错误:apple-gcc42没有可用的公式”
TomFuertes

1
最终,这为我解决了这个问题-谢谢!我在下面尝试了M.Scott Ford的symlink解决方案,它似乎可以工作,但是当我实际上尝试执行任何操作(耙子,滑轨等)时,抛出了一个错误。
凯尔·福克斯

2
您更新到therubyracer 0.12.0后为我解决了此问题。
jackocnr 2014年

6
不幸的是,这些解决方案都不适用于OSX 10.9,ruby 2.1.0和therubyracer 0.12.1。
turboladen 2014年

16

因此,经过一番苦苦挣扎,我终于让它开始工作了……多亏了Simon和Alvaro。

我要添加的一件事是,使用--with-system-v8标志对我不起作用...所以我用

brew uninstall v8

和运行

gem install libv8

如果您已经gem install libv8使用system v8标志运行,请确保卸载该gem版本(通过运行来进行安装gem uninstall libv8)。重要的是,您不应该使用brew提供的程序,它在Mavericks中似乎不起作用(安装正确,bundler将报告您的程序包已完成,但是当您尝试使用v8时,您的应用程序将失败)。

总结答案,请执行以下操作:

brew install apple-gcc42
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 /usr/bin/gcc
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2 /usr/bin/g++
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2 /usr/bin/cpp

brew uninstall v8
gem install libv8
gem install therubyracer

2
这对我有用。但是我将gcc符号链接到/ usr / local / bin并重新启动了终端,因此在安装libv8之后可以将其删除。
Jamon Holmgren

2
将具有该特定版本的自制程序二进制文件符号链接到/ usr / bin中,是一个非常糟糕的主意。接下来brew update出现并修订这些路径的操作将使您处于中断状态。
mrm 2014年

10

我有同样的问题,这对我有用:

therubyracer(0.10.2)和libv8(3.3.10.4)

首先:

  • brew install apple-gcc42
  • 必须链接编译器的所有二进制文件(gcccppg++),以/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/<compiler>

之后,您可以尝试以下操作:

  • brew install v8
  • gem install libv8 -v '3.3.10.4' -- --with-system-v8
  • gem install therubyracer -v 'therubyracer'bundle install进入rails项目的目录。

apple-gcc42: This formula either does not compile or function as expected on macOS 我的macOS是10.12.6
Wylliam Judd

7

我只是有同样的问题,一种解决方案是当前使用apple-gcc42而不是clang来编译两个gems:

brew install apple-gcc42

然后,您可以选择在/ usr / bin中为{gcc,g ++,c ++}二进制文件进行一些符号链接:

sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 /usr/bin/gcc
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2 /usr/bin/g++
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2 /usr/bin/cpp

实际上,g ++应该足够了。

或者...您可以导出CC / CXX / CPP环境变量,其路径对应于自制软件创建的二进制文件。这肯定是一种更清洁的解决方法。

第三种解决方案是下载Xcode 4.6.3并将其安装在Applications文件夹中。然后,在终端中输入:

sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developer
gem install therubyracer

一旦安装了gem,就可以切换回Xcode 5.0:

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

如何将编译器切换到apple-gcc42?
user2711889

当我尝试与编译器关联时,@ Simon会提示该文件存在。那是c文件吗?如果我运行bundle install,它似乎没有使用gcc,因为该错误充满了clang引用。
isea 2013年

如果您使用的是MacPorts,则无需进行符号链接即可指向其他GCC版本,为此有一个内置命令(请参阅我的回答)。
jshkol 2013年

6

我发现了一种无需安装apple-gcc42的解决方法。

如果您收到的错误消息如下所示,这将起作用:

clang: error: no such file or directory: '/Users/mscottford/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a'

然后,您应该能够执行以下操作:

brew install v8
bundle install 
# after failing create link from brew installed v8 to error location
ln -s /usr/local/Cellar/v8/3.21.17/lib/libv8_base.x64.a /Users/mscottford/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a
bundle install

资料来源:https : //github.com/cowboyd/therubyracer/issues/277#issuecomment-27734348


这个+1。该gem可以安装在CLI上,但是RubyMine v6拒绝安装它。设置此符号链接最终解决了该问题。谢谢!
Ode 2013年

1
这1000%,@ M.ScottFord欢呼雀跃。我使用rvm,因此我的ln语句是:ln -s /usr/local/Cellar/v8/3.21.17/lib/libv8_base.x64.a ~/.rvm/gems/ruby-1.9.3-p327/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a
Dave Foster

3

正如许多答案所建议的那样,最简单的方法是使用Apple GCC 4.2(而不是随Xcode安装的版本)编译Ruby Racer本机扩展。

如果您使用的是MacPorts,则无需手动处理为GCC二进制文件设置符号链接的过程。该port select命令为您完成。如果自安装Mavericks以来尚未更新MacPorts,请执行sudo port selfupdate。使用最新的MacPorts,请尝试以下操作:

# If you don't have it, install the port for Apple's GCC 4.2
sudo port install apple-gcc42 

    # OR

# If you had apple-gcc42 already (before Mavericks), update it
sudo port upgrade apple-gcc42


# Same result as manual symlinking of GCC in other answers
sudo port select gcc apple-gcc42 && hash -r

# Install therubyracer, will install libv8 gem dependency
#  *note* if you have any existing versions of these gems, remove them
gem install therubyracer

# Restore GCC to system default (optional)
sudo port select gcc none && hash -r

通常,sudo port select gcc [version]只要您要使用特定的GCC版本而不是Xcode安装的版本(Apple LLVM v5 for 10.9 Mavericks / Xcode 5),此过程()便可以使用。


1
在特立独行上为我工作。
Evo_x 2014年

3

我设法在ruby 2.0.0p353和os x 10.9上安装therubyracer 0.12和libv8 3.16.14.3

libv8需要gcc42

brew install v8
brew install apple-gcc42
sudo ln -sf /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 /usr/bin/gcc
sudo ln -sf /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2 /usr/bin/g++
sudo ln -sf /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2 /usr/bin/cpp
gem install libv8

therubyracer需要稍后的gcc

brew install gcc49
sudo ln -sf /usr/local/Cellar/gcc49/4.9-20131110/bin/gcc-4.9 /usr/bin/gcc
sudo ln -sf /usr/local/Cellar/gcc49/4.9-20131110/bin/g++-4.9 /usr/bin/g++
sudo ln -sf /usr/local/Cellar/gcc49/4.9-20131110/bin/cpp-4.9 /usr/bin/cpp

宝石文件

gem 'therubyracer', :require => 'v8', :platforms => :ruby

bundle代替gem install therubyracer


谢谢!bundle install经过数天的反复试验,这终于使我过去了。我所做的唯一不同是卸载了所有安装的开发人员工具,brew直到gcc --version报告它是Apple LLVM版本并配置了Xcode,然后再将现有的/usr/bin/gcc(等)移出,然后再对apple-gcc42进行符号链接。库,而不是安装gcc49(上次我尝试它接管了我们的配置),我只是复制了原始的gcc,g ++和cpp库。鉴于我尝试了3种不同的方法来找到对我有用的方法,YMMV
克里斯·布鲁姆

3

这应该是一种故障安全且干净的方法(没有符号链接),以便为有问题的任何人安装therubyracer。

摘自:gem install therubyracer -v 0.11.4在OS X 10.10上失败

安装Xcode(如果您尚未安装这些版本之一)6.1.1、6.2-beta或6.3-beta和(需要此版本)4.6.3

gem uninstall libv8 如果您还没有这样做的话

切换到Xcode 4.6.3

sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developer

gem install libv8 -v '3.11.8.17' 或与您的therubyracer版本相关的任何版本

切换到Xcode 6.1.1、6.2-beta或6.3-beta(或者,如果您想尝试当前安装的Xcode,请调整此行,我已经确认了所有这三项工作)

sudo xcode-select --switch /Applications/Xcode6.1.1.app/Contents/Developer

gem install therubyracer -v '0.11.4' 或您要安装的版本。


1
谢谢@ th01这对我有用...我尝试了3个小时可以找到的所有内容...就我而言,它是libv8 gem。下载了Xcode4.6.3并在该版本上运行它并成功安装。以下是有关如何安装多个Xcode版本的快速教程的链接:blogs.oracle.com/mobile/entry/how_to_install_multiple_xcodes
miligraf

当我下载Xcode 4.6.3然后运行sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developer然后运行时,gem install libv8 -v '3.3.10.4'我得到:unable to locate xcodebuild, please make sure the path to the Xcode folder is set correctly! 我做错了什么?
Wylliam Judd

1

尝试安装therubyracer 0.12.0使其与libv8配合使用时,我遇到了几乎相同的错误。这对我有用:

$ brew upgrade gcc

$ gem uninstall therubyracer

$ gem uninstall libv8

$ gem install therubyracer -v '0.12.0'
Fetching: therubyracer-0.12.0.gem (100%)
Building native extensions.  This could take a while...
Successfully installed therubyracer-0.12.0
1 gem installed

$ gem install libv8 -v '3.16.14.3' -- --with-system-v8
Fetching: libv8-3.16.14.3.gem (100%)
Building native extensions with: '--with-system-v8'
This could take a while...
Successfully installed libv8-3.16.14.3
1 gem installed

0

从OSX Mountain Lion升级到OSX Mavericks时,我遇到了同样的问题。

从ruby-1.8.7-p354升级到ruby-1.8.7-375对我有用。

也许尝试从ruby 1.9.3-p194升级到rc1(1.9.3现在高于p484)

假设您使用rbenv:

rbenv install 1.9.3-rc1
rbenv rehash
rbenv global 1.9.3-rc1
bundle install

0

从小牛升级到优胜美地后,我遇到了这个问题。问题是我用旧版本的OSX编译了Ruby版本。

如果我跑了

ruby -rubygems -e 'puts Gem::Platform.new(RUBY_PLATFORM)'

我会x86_64-darwin-13代替x86_64-darwin-14优胜美地。

重新安装Ruby I

  1. 完全删除旧版本: rvm remove ruby-2.1.1
  2. 从源代码重新安装(--disable-binary不使用预编译的二进制文件,而是强制构建): rvm reinstall --disable-binary 2.1

然后bundle install,在尝试了上述所有解决方案之后,我能够毫无错误地运行。


-2

我所做的就是在osx特立独行者身上:

git clone git@github.com:cowboyd/therubyracer.git

然后:

gem build therubyracer.gemspec
gem install therubyracer-0.12.1.gem

此过程下载并安装了libv8的二进制版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.