6.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. libtoolなどのライブラリが/usr/libから得られたか確認します。

    LDFLAGS="-L/usr/lib"
  5. ライブラリがlibサブディレクトリに格納されているか確認します。

    --libdir=/usr/lib
  6. 32ビットXライブラリが使用されているか確認します。

    --x-libraries=/usr/lib/xorg

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

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

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