例如;如果我想安装任何依赖于体系结构的 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 内部进行了一些跟踪之后,我发现了这些:
RBCONFIG["arch"]
。这是一个常见的 gnu 风格架构三元组。arch
命令,这是一个简单的工具,其结果与 uname -m
相同。此命令检查实际使用的内核架构,而不是您正在编译的内核架构!因此,例如,在 64 位内核上的 32 位系统中,
arch
和 uname -m
报告 x86-64 而不是 i386(或 x32)。
但是,您可以使用编译脚本的标志
--target
轻松更改此设置。在特定情况下,如果您想在 64 位系统上编译 32 位 ruby,请使用 configure --target=i386-linux-gnu
,即使它看起来不需要(因为您使用的是 32 位 gcc)。