20 64ビットシステム環境での32ビットと64ビットのアプリケーション #
SUSE® Linux Enterprise Serverは複数の64ビットプラットフォームで利用できます。ただし、開発者はすべての32ビットアプリケーションを64ビットシステムに移植しているわけではありません。この章では、32ビットサポートを64ビットのSUSE Linux Enterprise Serverプラットフォームで実装する方法について簡潔に説明します。
64ビットプラットフォームのPOWER、IBM Z、およびAMD64/Intel 64に対応したSUSE Linux Enterprise Serverは、既存の32ビットアプリケーションが64ビット環境で「出荷してすぐに」 動作するように設計されています。対応する32ビットプラットフォームは、POWERではPOWER、AMD64/Intel 64ではx86になります。このサポートにより、対応する 64ビット移植版が使用可能になるのを待たなくても、使用したい 32ビットアプリケーションを引き続き使用できます。現在のPOWERシステムでは、大部分のアプリケーションが32ビットモードで実行されますが、64ビットアプリケーションを実行することもできます。
SUSE Linux Enterprise Serverでは32ビットアプリケーションのコンパイルをサポートしていません。32ビットバイナリのランタイムサポートのみ提供します。
20.1 ランタイムサポート #
アプリケーションが32ビットと64ビットの両方の環境で利用可能な場合は、両方のバージョンをインストールすると問題が発生する可能性があります。このような場合は、ランタイムエラーになるのを回避するために、インストールする一方のバージョンを決めてください。
PAM(プラグ可能認証モジュール)は、このルールの例外です。SUSE Linux Enterprise Serverは、ユーザとアプリケーションを仲介するレイヤとしての認証プロセスでPAMを使用します。32ビットアプリケーションも実行する64ビットオペレーティングシステムでは、常に両方のPAMバージョンをインストールしてください。
正しく実行するには、すべてのアプリケーションに一連のライブラリが必要です。これらのライブラリの32ビットバージョンと64ビットバージョンでは名前が同じであるため、別の方法で互いを区別する必要があります。
32ビットバージョンとの互換性を保持するため、64ビットライブラリと32ビットライブラリは同じ場所に保存されます。libc.so.6
の32ビットバージョンは、32ビットと64ビットのどちらの環境でも/lib/libc.so.6
の下にあります。
64ビットのすべてのライブラリとオブジェクトファイルは、lib64
というディレクトリにあります。通常は/lib
および/usr/lib
の下にある64ビットオブジェクトファイルは、現在は/lib64
および/usr/lib64
の下にあります。つまり、両方のバージョンのファイル名を変更しなくても済むように、32ビットライブラリで使用可能な領域は/lib
および/usr/lib
の下になっています。
/lib
の下にある32ビットサブディレクトリのデータコンテンツがワードサイズに依存しない場合、サブディレクトリは移動されません。このスキームは、LSB (Linux Standards Base)とFHS (Filesystem Hierarchy Standard)に準拠しています。
20.2 カーネル仕様 #
AMD 64/Intel 64、POWER、およびIBM Z向けの64ビットカーネルには、64ビットと32ビットのカーネルABI(アプリケーションバイナリインタフェース)が用意されています。32ビットのカーネルABIは、該当する32ビットカーネルのABIと同じものです。つまり、32ビットアプリケーションと64ビットアプリケーションが64ビットカーネルで通信できることを意味します。
64ビットカーネルのシステムコールの32ビットエミュレーションはシステムプログラムによって使用されるすべてのAPIをサポートしていません。ただし、このサポートの有無はプラットフォームによって異なります。このため、lspci
などのいくつかのアプリケーションは、正しく機能するよう、64ビットプログラムとして非POWERプラットフォームでコンパイルする必要があります。IBM Zでは、32ビットカーネルABIで利用できないioctlsがあります。
64ビットカーネルは64ビットカーネルモジュールのみロードすることができます。そのため、64ビットカーネル用に特別に64ビットモジュールをコンパイルする必要があります。64ビットカーネルでは、32ビットカーネルモジュールを使用することはできません。
特定のアプリケーションには、カーネルでロード可能な個々のモジュールが必要です。32ビットアプリケーションを64ビットシステム環境で使用したい場合は、アプリケーションおよびSUSEのプロバイダに問い合わせてください。カーネルロード可能モジュールの64ビットバージョンとカーネルAPIの32ビットコンパイルバージョンがこのモジュール用に入手可能であることを確認してください。