Например; если я хочу установить любой драгоценный камень, зависящий от архитектуры, например nokogiri
(библиотека xml для Ruby), но для любого драгоценного камня, зависящего от архитектуры, ситуация такая же.
Я использую дистрибутив x86, но на ядре x86_64. Мой Ruby 32-битный, но gem install nokogiri
устанавливает 64-битную версию (что приведет к ошибке, поскольку его общая библиотека не может ссылаться на 32-битный Ruby).
Как это решается? Мой рубин 32-битный, мне нужен 32-битный драгоценный камень. Проблема очень похожа в созвездии Armhf/arm64 или если я пытаюсь использовать любой другой уровень эмуляции (например, qemu-user, cygwin или Wine). В общем, я хочу установить драгоценный камень, который соответствует моему интерпретатору Ruby, а не тот, который чем-то определяется автоматически.
Что делать?
Немного проследив за внутренностями Ruby, я нашел следующее:
/usr/lib/i386-linux-gnu/ruby/3.1.0/rbconfig.rb
. Проверьте наличие RBCONFIG["arch"]
в этом файле. Это обычный триплет архитектуры в стиле GNU.arch
, которая представляет собой тривиальный инструмент с тем же результатом, что и uname -m
. Эта команда проверяет фактическую используемую архитектуру ядра, а не ту, для которой вы компилируете!Так, например, в 32-битной системе на 64-битном ядре arch
и uname -m
сообщают x86-64, а не i386 (или x32).
Однако вы можете легко изменить это, установив флаг --target
в скрипте компиляции. В конкретном случае, если вы хотите скомпилировать 32-битный Ruby в 64-битной системе, используйте configure --target=i386-linux-gnu
, даже если это не кажется необходимым (поскольку вы используете 32-битный gcc).
Если появится лучший ответ, трубку получит он, а не этот.