如何使用预安装的 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 文件夹),但不知道把它放在哪里。我还通过从 ruby​​gems 下载 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。 你说得对,我刚刚检查了一下,似乎我从 ruby​​gems 获得了第一个可用于 arm64 的:5.7.4。不过,问题是如何安装rubyracer,有什么办法吗?只要它支持 ruby​​ 1.9.3,我就可以安装更新的版本。我会更新这个问题,所以这很清楚。谢谢 我现在在想,如果我安装了 v 5.7.4,我不知道为什么我的 ~/.gem 文件夹中有一个 3.16.14 文件夹。我的设备现在没电了,但我会尽快检查。也许从 .gem 文件安装时,它会安装在其他地方?无论如何,如果有人能想出如何使用 prebuild v8(与 libv8 afaik 不同)安装 ruby​​racer,那就太棒了

以上是关于如何使用预安装的 libv8 gem 和预编译的 v8 依赖项在 aarch64 上安装 therubyracer?的主要内容,如果未能解决你的问题,请参考以下文章

尝试安装 libv8 v3.11.8.9 时如何解决此问题?

GCC 和预编译头文件

js构建工具和预编译

递归和预编译

mysql sp 练习游标和预编译

Part5 数据的共享与保护 5.6多文件结构和预编译命令