gem はどの Arch 固有の gem をインストールするかをどのように決定しますか?

概要

例えば; nokogiri (Ruby 用の xml ライブラリ) などのアーキテクチャに依存する gem をインストールしたい場合は、アーキテクチャに依存する gem の場合も同様です。

私は x86 ディストリビューションを使用していますが、x86_64 カーネル上にあります。私の Ruby は 32 ビットですが、gem インストール nokogiri を実行すると 64 ビット バージョンがインストールされます (共有ライブラリは 32 ビット Ruby にリンクできないため、エラーが発生します)。

どのように決定されているのでしょうか?私の Ruby は 32 ビットなので、32 ビットの gem が必要です。この問題は、armhf/arm64 コンステレーションでも、または別のエミュレーション層 (qemu-user、cygwin、wine など) を使用しようとしている場合でも非常に似ています。一般に、何かによって自動検出されたものではなく、Ruby インタプリタに一致する gem をインストールしたいと考えています。

何をするか?

解決策

Ruby の内部を少し追跡したところ、次のことがわかりました。

したがって、たとえば、64 ビット カーネル上の 32 ビット システムでは、arch および uname -m は i386 (または x32) ではなく x86-64 を報告します。

ただし、コンパイル スクリプトにフラグ –target を指定すると、これを非常に簡単に変更できます。特定のケースでは、64 ビット システム上で 32 ビット Ruby をコンパイルしたい場合は、必要ないようであっても (32 ビット gcc を使用しているため)、configure –target=i386-linux-gnu を使用します。 )。