Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
コンテンツコンテンツ
管理ガイド
  1. このガイドについて
  2. I サポートと共通タスク
    1. 1 YaSTオンラインアップデート
    2. 2 サポート用システム情報の収集
    3. 3 テキストモードのYaST
    4. 4 Snapperによるスナップショットとロールバック
    5. 5 VNCによるリモートアクセス
    6. 6 コマンドラインツールによるソフトウェアの管理
    7. 7 BashとBashスクリプト
    8. 8 Using Third-Party Software
  3. II システム
    1. 9 64ビットシステム環境での32ビットと64ビットのアプリケーション
    2. 10 Linuxシステムのブートと設定
    3. 11 ブートローダGRUB
    4. 12 UEFI (Unified Extensible Firmware Interface)
    5. 13 特別なシステム機能
    6. 14 プリンタの運用
    7. 15 udevによる動的カーネルデバイス管理
    8. 16 X Windowシステム
    9. 17 FUSEによるファイルシステムへのアクセス
  4. III モバイルコンピュータ
    1. 18 Linuxでのモバイルコンピューティング
    2. 19 無線LAN
    3. 20 電源管理
    4. 21 タブレットPCの使用
  5. IV サービス
    1. 22 ネットワークの基礎
    2. 23 ネットワーク上のSLPサービス
    3. 24 NTPによる時刻の同期
    4. 25 ドメインネームシステム
    5. 26 DHCP
    6. 27 NetworkManagerの使用
    7. 28 Samba
    8. 29 NFS共有ファイルシステム
    9. 30 ファイルの同期
    10. 31 Apache HTTPサーバ
    11. 32 YaSTを使用したFTPサーバの設定
    12. 33 Squidプロキシサーバ
    13. 34 SFCBを使用したWebベースの企業管理
  6. V トラブルシューティング
    1. 35 ヘルプとドキュメント
    2. 36 最も頻繁に起こる問題およびその解決方法
  7. A サンプルネットワーク
  8. B GNU Licenses
ナビゲーション
適用先 SUSE Linux Enterprise Server 11 SP4

9 64ビットシステム環境での32ビットと64ビットのアプリケーション

SUSE® Linux Enterprise Server複数の64ビットプラットフォームで利用できます。ただし、付属のすべてのアプリケーションが64ビットプラットフォームに移植されている訳ではありません。SUSE Linux Enterprise Serverは、64ビットシステム環境での32ビットアプリケーションの使用をサポートしています。この章では、このサポートを64ビットのSUSE Linux Enterprise Serverプラットフォームで実装する方法について簡潔に説明します。また、32ビットアプリケーションの実行方法(ランタイムサポート)、および32ビットと64ビットのシステム環境の両方で実行できるように32ビットアプリケーションをコンパイルする方法について説明します。さらに、カーネルAPIに関する情報、および32ビットアプリケーションを64ビットカーネルで実行する方法についても説明します。

i64ビットプラットフォームであるa64、ppc64、System z、x86_64に対応したSUSE Linux Enterprise Serverは、既存の32ビットアプリケーションが64ビット環境で出荷してすぐに対応する32ビットプラットフォームには、ia64のx86、ppc64のppc、およびx86_64のx86があります。このサポートにより、対応する 64ビット移植版が使用可能になるのを待たなくても、使用したい 32ビットアプリケーションを引き続き使用できます。現在のppc64システムは、大部分のアプリケーションを 32ビットモードで実行しますが、 64ビットアプリケーションを実行することもできます。

9.1 ランタイムサポート

重要
重要: アプリケーションバージョン間の競合

アプリケーションが32ビットと64ビットの両方の環境で使用可能な場合に、両方のバージョンを同時にインストールすると問題が生じます。そのような場合は、2つのバージョンのどちらかだけをインストールして使用してください。

PAM(プラグ可能認証モジュール)は、このルールの例外です。SUSE Linux Enterprise Serverは、ユーザとアプリケーションを仲介するレイヤとしての認証プロセスでPAMを使用します。また、 32ビットアプリケーションも実行する64ビットオペレーティングシステムでは、常に両バージョンのPAMモジュールをインストールする必要があります。

正しく実行するために、すべてのアプリケーションにはライブラリが必要です。しかし残念ながら、32ビットバージョンと64ビットバージョンのライブラリの名前は同じです。そのため、ライブラリを別の方法で区別する必要があります。

32ビットバージョンとの互換性を維持するために、ライブラリは32ビット環境の場合と同じシステム内の場所に格納されます。libc.so.6の32ビットバージョンは、32ビットと64ビットのどちらの環境でも/lib/libc.so.6の下にあります。

64ビットのすべてのライブラリとオブジェクトファイルは、lib64というディレクトリにあります。通常、/libおよび/usr/libの下にある64ビットのオブジェクトファイルは、/lib64および/usr/lib64の下にあります。つまり、両方のバージョンのファイル名を変更しなくても済むように、32ビットライブラリ用の領域は/libおよび/usr/libの下になっています。

ワードサイズに依存しないデータコンテンツを持つ、32ビットの/libディレクトリ中のサブディレクトリは移動されません。このスキームは、LSB (Linux Standards Base)とFHS (File System Hierarchy Standard)に準拠しています。

ipf ia64用の64ビットライブラリは、標準libディレクトリ内にあり、lib64ディレクトリもlib32ディレクトリも存在しません。ia64は、32ビットx86コードをエミュレーションで実行します。基本的なライブラリセットは、/emul/ia32-linux/libおよび/emul/ia32-linux/usr/libにインストールされます。

9.2 ソフトウェア開発

すべての64ビットアーキテクチャで、64ビットオブジェクトの開発がサポートされています。32ビットコンパイル機能のサポートレベルは、アーキテクチャによって異なります。32ビットコンパイル機能は、GCC (GNU Compiler Collection)やbinutilsによるツールチェーンの各種実装オプションになっています。Binutilsには、アセンブラasとリンカーldが含まれています。

biarchコンパイラ

32ビットと64ビットのオブジェクトはどちらもbiarch開発ツールチェーンで生成できます。biarch開発ツールチェーンを使用して、32ビットと64ビットのオブジェクトを生成できます。ほぼすべてのプラットフォームにおいて、デフォルトでは64ビットオブジェクトのコンパイルが実行されます。32ビットオブジェクトは、特殊なフラグを使用すれば生成できます。この特殊なフラグは、GCCでは-32です。binutilsのフラグはアーキテクチャによって異なりますが、GCCは正しいフラグをリンカーやアセンブラに転送します。現在では、amd64 (x86とamd64の命令の開発をサポート)、System z、およびppc64用のbiarch開発ツールチェーンが存在します。通常、32ビットオブジェクトはppc64プラットフォームで作成されます。-m64フラグは、64ビットオブジェクトの生成に使用する必要があります。

未サポート

SUSE Linux Enterprise Serverでは、すべてのプラットフォームで32ビットソフトウェアを直接開発できるとは限りません。ia64でx86用のアプリケーションを開発するには、対応する32ビットバージョンのSUSE Linux Enterprise Serverを使用します。

すべてのヘッダファイルは、アーキテクチャに依存しない形式で作成する必要があります。インストール済みの32ビットと64ビットのライブラリには、インストール済みのヘッダファイルに対応するAPI (アプリケーションプログラミングインタフェース)が必要です。標準のSUSE Linux Enterprise Server環境は、この原則に従って設計されています。ライブラリを手動で更新した場合は、各自でAPIの問題を解決してください。

9.3 biarchプラットフォームでのソフトウェアのコンパイル

biarchアーキテクチャで他のアーキテクチャ向けのバイナリを開発するには、対象のアーキテクチャのそれぞれのライブラリをさらにインストールする必要があります。こうしたパッケージは、対象のアーキテクチャが-32ビットアーキテクチャである場合はrpmname- 32bitまたはrpmname-x86(ia64の場合)と呼ばれ、対象のアーキテクチャが-64ビットアーキテクチャである場合はrpmname- 64bitと呼ばれます。さらに、rpmname-develパッケージからそれぞれのヘッダとライブラリ、また、rpmname-devel-32bitまたはrpmname-devel-64bitから対象のアーキテクチャ向けの開発ライブラリも必要です。

たとえば、対象のアーキテクチャが32ビットアーキテクチャ(x86_64またはSystem z)であるシステムでlibaioを使用するプログラムをコンパイルするには、次のRPMが必要です。

libaio-32bit

32ビットランタイムパッケージ

libaio-devel-32bit

32ビット開発用のヘッダとライブラリ

libaio

64ビットランタイムパッケージ

libaio-devel

64ビット開発用のヘッダとライブラリ

ほとんどのオープンソースプログラムでは、autoconfベースのプログラム設定が使用されています。対象のアーキテクチャ向けプログラムの設定にautoconfを使用するには、autoconfの標準のコンパイラとリンカーの設定に上書きするために、さらに環境変数を指定してconfigureスクリプトを実行します。

次の例は、対象のアーキテクチャとしてx86を採用しているx86_64システムを示しています。対象のアーキテクチャとしてppcを採用しているppc64の場合も同様です。この例は、32ビットパッケージをビルドできないia64には適用されません。

  1. 32ビットコンパイラを使用します。

    CC="gcc -m32"
  2. リンカーに 32ビットオブジェクトの処理を指示します(リンカーのフロントエンドには常にgccを使用)。

    LD="gcc -m32"
  3. 32ビットオブジェクトを生成するためにアセンブラを設定します。

    AS="gcc -c -m32"
  4. 次に示すような、32ビットライブラリの場所などのリンカフラグを指定します。

    LDFLAGS="-L/usr/lib"
  5. 32ビットオブジェクトコードライブラリの場所を指定します。

    --libdir=/usr/lib
  6. 32ビットXライブラリの場所を指定します。

    --x-libraries=/usr/lib

こうした変数のすべてがどのプログラムにも必要なわけではありません。それぞれのプログラムに合わせて使用してください。

x86__64、ppc64、またはSystem zでネイティブの32ビットアプリケーションをコンパイルする場合の、configureコールの例を次に示します。

CC="gcc -m32"
LDFLAGS="-L/usr/lib;"
./configure --prefix=/usr --libdir=/usr/lib --x-libraries=/usr/lib
make
make install

9.4 カーネル仕様

x86_64、ppc_64およびSystem z向けの64ビットカーネルには、64ビットと32ビットのカーネルABI (アプリケーションバイナリインタフェース)が用意されています。32ビットのカーネルABIは、該当する32ビットカーネルのABIと同じものです。つまり、32ビットアプリケーションが、32ビットカーネルの場合と同様に64ビットカーネルと通信できるということです。

64ビットカーネルのシステムコールの32ビットエミュレーションでは、システムプログラムで使用されるすべてのAPIをサポートしていません。ただし、このサポートの有無はプラットフォームによって異なります。このため、lspciなどの少数のアプリケーションは、正しく機能するように64ビットプログラムとして非ppc 64プラットフォームでコンパイルする必要があります。IBM System zでは、32ビットカーネルABIで利用できないioctlsがあります。

64ビットカーネルでは、このカーネル用に特別にコンパイルされた64ビットカーネルモジュールしかロードできません。したがって、32ビットカーネルモジュールを使用することはできません。

ヒント
ヒント: カーネルロード可能モジュール

一部のアプリケーションには、カーネルでロード可能な個々のモジュールが必要です。64ビットシステム環境でそのような32ビットアプリケーションを使用する予定がある場合は、このアプリケーションおよびSUSEのプロバイダに問い合わせて、このモジュール向けのカーネルでロード可能な64ビットバージョンのモジュールと32ビットコンパイルバージョンのカーネルAPIを入手できるかを確認してください。

このページを印刷