Biarch 平台的軟體編譯

若要在 biarch 結構上,為其他結構開發二進位程式,必須為第二個結構額外安裝相關程式庫。如果第二個結構是 32 位元結構,這些套件稱為 rpmname-32bitrpmname-x86 (針對 ia64);如果第二個結構是 64 位元結構,則套件稱為 rpmname-64bit。您還需要 rpmname-devel 套件的各個標頭和程式庫,以及 rpmname-devel-32bitrpmname-devel-64bit 之第二個結構的開發程式庫。

例如,若要編譯一個使用 libaio 的程式,而所在系統的第二個結構是 32 位元結構 (x86_64 或 s390x),您需要以下 RPM:

libaio-32bit

32 位元執行期間套件

libaio-devel-32bit

32 位元開發的標題和程式庫

libaio

64 位元執行期間套件

libaio-devel

64 位元開發標題和程式庫

大部份開放原始碼程式使用的程式組態是以 autoconf 為基礎。若要使用 autoconf 為第二個結構設定程式,請覆寫 autoconf 的一般編譯器和連結器設定,方法是執行包含其他環境變數的 configure 程序檔。

以下範例參考第二個結構為 x86 的 x86_64 系統:以 s390 為第二個結構的 s390x,或以 ppc 為第二個結構的 ppc64,其範例都與此類似。此範例不適用於未建立 32 位元套件的 ia64。

[Tip]

採用 s390 做為第二個結構時,必須使用 -m31,而不能使用 -m32,因為這是一個 31 位元系統。

  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/X11R6/lib/

並非每一個程式都需要所有這些變數。將它們配合各程式使用。

在 x86_64、ppc64 或 s390x 上編譯原生 32 位元應用程式的 configure 呼叫範例如下:

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