osx mavericks 上的“gem install therubyracer -v '0.10.2'”未安装

Posted

技术标签:

【中文标题】osx mavericks 上的“gem install therubyracer -v \'0.10.2\'”未安装【英文标题】:"gem install therubyracer -v '0.10.2'" on osx mavericks not installingosx mavericks 上的“gem install therubyracer -v '0.10.2'”未安装 【发布时间】:2013-11-06 22:49:53 【问题描述】:

尝试使用“gem install therubyracer -v '0.10.2'”在 Mavericks 上安装 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吗?在安装 gem 之前尝试使用 brew install v8 安装 v8 我相信 brew install v8 是一个单独的问题。请参阅***.com/questions/11598655/therubyracer-install-error 了解有关 brew 的 v8 的详细信息。 【参考方案1】:

如果您决定使用更新的therubyracer gem 版本,您将不再有这个问题

否则:

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

【讨论】:

这种方法似乎比修改符号链接更好 brew tap homebrew/dupes 修复“错误:没有适用于 apple-gcc42 的公式” 这终于为我解决了这个问题——谢谢!我在下面尝试了 M. Scott Ford 的符号链接解决方案,它似乎可以工作,但是当我实际尝试做任何事情(rake、rails 等)时抛出了一个错误。 你更新到 therubyracer 0.12.0 为我解决了这个问题。 不幸的是,这些解决方案都不适用于 OSX 10.9、ruby 2.1.0 和 therubyracer 0.12.1。【参考方案2】:

经过一番挣扎,我终于让它工作了……感谢 Simon 和 Alvaro。

我还有一件事要补充,使用标志 --with-system-v8 对我不起作用...所以我删除了我的系统 v8

brew uninstall v8

然后运行

gem install libv8

如果您已经使用系统 v8 标志运行 gem install libv8,请务必卸载该 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

【讨论】:

这对我有用。但是我将 gcc 符号链接到 /usr/local/bin 并重新启动终端,以便在安装 libv8 后将其删除。 将带有特定版本的自制二进制文件符号链接到 /usr/bin 是一个非常糟糕的主意。下一个出现并改变这些路径的 brew update 将使您处于崩溃状态。【参考方案3】:

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

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/&lt;compiler&gt;

之后,你可以试试这个:

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【参考方案4】:

我也遇到了同样的问题,目前的一种解决方案是使用 apple-gcc42 而不是 clang 来编译这两个 gem:

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? @Simon 当我尝试对编译器进行符号化时,我收到一条消息,指出文件存在。那是clang文件吗?如果我运行 bundle install 它似乎没有使用 gcc,因为错误中充满了 clang 引用。 如果您使用的是 MacPorts,则无需符号链接即可指向不同的 GCC 版本,有一个内置命令(请参阅我的回答)。【参考方案5】:

我找到了一种无需安装 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 拒绝安装它......设置这个符号链接最终解决了这个问题。谢谢! 这 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【参考方案6】:

正如许多答案中所建议的,最简单的做法是使用 Apple GCC 4.2(而不是随 Xcode 安装的版本)编译 The 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)时工作。

【讨论】:

在小牛队为我工作。【参考方案7】:

我设法在 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【参考方案8】:

这应该是为遇到问题的任何人安装 therubyracer 的一种安全且干净的方式(无符号链接)。

取自:gem install therubyracer -v 0.11.4 fails on 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,请调整此行,我已经确认所有这 3 个工作)

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

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

【讨论】:

感谢@th01 这对我有用...我尝试了 3 小时内能找到的所有东西...在我的情况下,它是 libv8 gem。下载 Xcode4.6.3 并使用该版本运行它并成功安装。这是一个链接,其中包含有关如何安装多个 Xcode 版本的快速教程:blogs.oracle.com/mobile/entry/how_to_install_multiple_xcodes 当我下载 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! 我做错了什么?【参考方案9】:

在尝试安装 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

【讨论】:

【参考方案10】:

当我从 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

【讨论】:

【参考方案11】:

我从 Mavericks 升级到 Yosemite 后遇到了这个问题。问题是我用旧版本的 OSX 编译了我的 Ruby 版本。

如果我跑了

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

对于优胜美地,我会得到 x86_64-darwin-13 而不是 x86_64-darwin-14

重新安装 Ruby I

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

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

【讨论】:

【参考方案12】:

我所做的是在 osx 小牛队:

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

然后:

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

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

【讨论】:

以上是关于osx mavericks 上的“gem install therubyracer -v '0.10.2'”未安装的主要内容,如果未能解决你的问题,请参考以下文章

Qt5.2.1,.2.0 OSX Mavericks 上的渲染问题 - 是啥原因造成的,如何解决?

在 OSX Mavericks 上安装 Cutecom 失败

Mavericks 上的 OS X 服务器是不是需要单独的 Mac

在 migratePersistentStore: 到 OS X 10.9 Mavericks 上的另一个 URL 后访问 NSManagedObject 属性时崩溃

RODBC 连接到 Mavericks 上的 SQL Server

OS X 10.9 Mavericks - 使用虚拟主机设置本地主机