如何使用预安装的 libv8 gem 和预编译的 v8 依赖项在 aarch64 上安装 therubyracer?
Posted
技术标签:
【中文标题】如何使用预安装的 libv8 gem 和预编译的 v8 依赖项在 aarch64 上安装 therubyracer?【英文标题】:How to install therubyracer on aarch64 using using preinstalled libv8 gem and precompiled v8 dependencies? 【发布时间】:2022-01-16 07:28:03 【问题描述】:我一直在尝试在 aarch64 设备上安装 therubyracer gem。我从源代码交叉编译了 v8(我有一个编译后的 arm64.release 文件夹),但不知道把它放在哪里。我还通过从 rubygems 下载 arm 所需版本的 .gem 文件成功安装了 libv8,并通过运行gem install path_to_gem
安装了它。我还将它添加到 gemfile 中:
gem 'libv8', path: '~/.gem/ruby/1.9.1/gems/libv8-3.16.14.11'
但是,当我运行 bundle install 并尝试安装 therubyracer 时,我收到错误,因为它尝试再次编译依赖项,尽管它已经安装。我猜它没有检测到已经安装了 libv8。我也不知道将交叉编译的 v8 放在哪里,所以我的系统会检测到它。我使用的是 arm64 ubuntu 版本。
gem install therubyracer -v '0.12.2' -- --with-system-v8
也不起作用,它仍然会尝试编译 v8。
请注意,我需要所有东西都与 ruby 1.9.3 和 rails 3.2 兼容,并且我需要在 aarch64/arm64 设备上使用它。
我尝试在 therubyracer github 上询问,但没有得到答案,因为它已经很旧了。
【问题讨论】:
【参考方案1】:我需要使用这些库的旧版本(therubyracer 0.12.2、libv8 3.16.14)并且我需要在 aarch64/arm64 设备上使用它们
很遗憾,V8 3.16.14(日期为 February 2013!)不支持 arm64。对 arm64 的支持已登陆 about a year later,最初名为“a64”,几周后renamed 变为“arm64”。
如果您在设备上运行 arm32+arm64“multilib”配置(Ubuntu 支持但不推荐),您可以尝试让 32 位 ARM 版本的 V8 和 therubyracer 工作。 (我不知道这将如何完成或是否会有其他障碍;libv8 gem mentions an issue 但这似乎与您的情况无关。)
【讨论】:
我能够为 arm64 手动构建和编译 v8(实际上是交叉编译,我是在 x64 笔记本电脑上完成的)。构建脚本可以选择这样做,所以我想这应该意味着它是受支持的,不是吗? 那么你可能编译了一个更新的版本;正如我在上面写的,arm64 自 2014 年 3 月以来一直支持。3.16.14 肯定不支持 arm64。 你说得对,我刚刚检查了一下,似乎我从 rubygems 获得了第一个可用于 arm64 的:5.7.4。不过,问题是如何安装rubyracer,有什么办法吗?只要它支持 ruby 1.9.3,我就可以安装更新的版本。我会更新这个问题,所以这很清楚。谢谢 我现在在想,如果我安装了 v 5.7.4,我不知道为什么我的 ~/.gem 文件夹中有一个 3.16.14 文件夹。我的设备现在没电了,但我会尽快检查。也许从 .gem 文件安装时,它会安装在其他地方?无论如何,如果有人能想出如何使用 prebuild v8(与 libv8 afaik 不同)安装 rubyracer,那就太棒了以上是关于如何使用预安装的 libv8 gem 和预编译的 v8 依赖项在 aarch64 上安装 therubyracer?的主要内容,如果未能解决你的问题,请参考以下文章