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
必须将编译器的所有二进制文件(gcc
、cpp
、g++
)链接到/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【参考方案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 属性时崩溃