gem 如何决定安装哪个特定于 arch 的 gem?

问题描述 投票:0回答:1

例如;如果我想安装任何依赖于体系结构的 gem,例如

nokogiri
(ruby 的 xml 库),但对于任何依赖于体系结构的 gem,情况都是相同的。

我使用 x86 发行版,但在 x86_64 内核上。我的 ruby 是 32 位的,但是

gem install nokogiri
安装了 64 位版本(这会导致错误,因为它的共享库无法链接到 32 位 ruby)。

如何决定?我的 ruby 是 32 位的,我想要 32 位的 gem。在 armhf/arm64 星座中或者如果我尝试使用任何不同的模拟层(例如 qemu-user 或 cygwin 或 wine),问题非常相似。一般来说,我想安装与我的 ruby 解释器匹配的 gem,而不是由某些东西自动检测到的 gem。

该怎么办?

ruby rubygems cpu-architecture
1个回答
0
投票

在对 ruby 内部进行了一些跟踪之后,我发现了这些:

  • 当前使用的架构来自本地ruby的内部rbconfig.rb。检查该文件中是否有
    RBCONFIG["arch"]
    。这是一个常见的 gnu 风格架构三元组。
  • 这个三元组是在 ruby 实例的编译过程中决定的,没有通用的方法来改变它。如果您愿意,您可以编辑此文件,但结果可能是无法使用的 ruby 解释器。
  • 在编译时,这个三元组来自
    arch
    命令,这是一个简单的工具,其结果与
    uname -m
    相同。此命令检查实际使用的内核架构,而不是您正在编译的内核架构!

因此,例如,在 64 位内核上的 32 位系统中,

arch
uname -m
报告 x86-64 而不是 i386(或 x32)。

但是,您可以使用编译脚本的标志

--target
轻松更改此设置。在特定情况下,如果您想在 64 位系统上编译 32 位 ruby,请使用
configure --target=i386-linux-gnu
,即使它看起来不需要(因为您使用的是 32 位 gcc)。

© www.soinside.com 2019 - 2024. All rights reserved.