Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
適用先 openSUSE Leap 15.6

8 64 ビットシステム環境における 32 ビット/ 64 ビットアプリケーション Edit source

openSUSE® Leap は 64 ビットプラットフォームで動作します。ですが、開発者側で全てのアプリケーションを 64 ビットプラットフォームに移植しているわけではありません。本章では、 64 ビットの openSUSE Leap プラットフォームで、どのようにして 32 ビットアプリケーションを動作させているのかについて、概要を説明しています。

openSUSE LeapAMD64 や Intel 64 の各 64 ビットプラットフォームで動作しますが、この 64 ビット環境内で 32 ビットアプリケーションを標準で動作させることができます。 このサポートにより、 64 ビット環境に移植されるのを待つまでもなく、既存の 32 ビットアプリケーションをそのまま使い続けることができるということです。

注記
注記: 32 ビットアプリケーションの構築に対するサポートについて

openSUSE Leap では、 32 ビットアプリケーションのコンパイルには対応していません。 32 ビットアプリケーションの実行のみをサポートしています。

8.1 ランタイムのサポート Edit source

重要
重要: アプリケーションのバージョン間矛盾について

あるアプリケーションに対して 32 ビット版と 64 ビット版の両方が存在する場合、両方のバージョンをインストールしてしまうと、問題が発生する場合があります。このような場合は、いずれかのバージョンをインストールしてお使いください。

ただし、 PAM (プラグイン型の認証モジュール; Pluggable Authentication Modules) ついては例外です。認証処理時の PAM は、ユーザとアプリケーションとの間での仲介として動作します。 32 ビットアプリケーションを動作させる 64 ビットオペレーティングシステムの場合は、両方のバージョンの PAM モジュールをインストールする必要があります。

また、正しく動作させるためには、それぞれのアプリケーションに様々なライブラリが必要となります。残念ながら、これらのライブラリの 32 ビット版と 64 ビット版は全く同じ動作をするものではありません。これらは互いに違うものとして扱う必要があります。

32 ビット版のアプリケーションの互換性を維持するために、 32 ビット版と 64 ビット版のライブラリは同じ場所に配置する必要があります。たとえば 32 ビット版の libc.so.6 は、 32 ビットオペレーティングシステムでも 64 ビットオペレーティングシステムでも、 /lib/libc.so.6 に配置します。

一方の 64 ビット版のライブラリとオブジェクトは、 lib64 以下に配置されます。 32 ビット版で /lib/usr/lib に配置していたオブジェクトファイルは、それぞれ /lib64/usr/lib64 に配置します。このような仕組みにより、 32 ビット版のライブラリは以前と同じ配置のまま、 64 ビット版のライブラリを同時に配置することができるようになっています。

ただし、 32 ビット版の /lib ディレクトリには、ビットサイズに関係のないデータも含まれていますが、これらについては移動されておらず、従来通りデータが配置されています。これは LSB (Linux Standards Base) と FHS (File System Hierarchy Standard) の仕様に準拠しているためです。

8.2 カーネルの仕様 Edit source

AMD64/Intel 64 の 64 ビットカーネルでは、 64 ビットと 32 ビットの両方に対して ABI (アプリケーションバイナリインターフェイス) が提供されています。しかも、 32 ビット版の ABI については、 32 ビット版のカーネルと全く同じ仕様になっています。これにより、 32 ビットアプリケーションであっても、 32 ビットカーネルの場合と全く同じ方法で 64 ビットカーネルにアクセスできることになります。

64 ビットカーネルでの 32 ビットシステムコールは、システムプログラムが使用する全ての API まではサポートしていません。これはプラットフォームに依存して決まります。このような理由から、 lspci のような少数のアプリケーションでは、同じビット数のライブラリを使用しなければなりません。

なお、 64 ビット版のカーネルは 64 ビット版のカーネルモジュールだけを読み込むことができます。 32 ビット版のカーネルモジュールを読み込むことはできません。

ヒント
ヒント: カーネルモジュールについて

アプリケーションによってはカーネルモジュールを提供していて、それを読み込まなければ正しく動作しないものがあります。 64 ビットシステム環境で、このような 32 ビット版アプリケーションを動作させたい場合は、このアプリケーションの製造元に連絡をとって、 64 ビット版のカーネルモジュールを作成してもらい、 32 ビット版のアプリケーションで動作するよう依頼する必要があります。

このページを印刷