Dokumentáció/SL9.3/Rendszer/32 és 64 bites alkalmazások 64 bites rendszerkörnyezetben

Icon-64bit.png A SUSE LINUX számos 64 bites platformhoz rendelkezésre áll. Ez nem jelenti szükségszerűen azt, hogy az összes tartalmazott alkalmazás át lett írva 64 bites platformokra. A SUSE LINUX támogatja 32 bites alkalmazások használatát 64 bites rendszerkörnyezetben. Ez a fejezet rövid áttekintést nyújt a támogatás 64 bites SUSE LINUX platformokon megvalósításáról. Bemutatja, hogy a 32 bites alkalmazások hogyan kerülnek végrehajtásra (futási támogatás), és hogy a 32 bites alkalmazásokat hogyan kell lefordítani, hogy 32 és 64 bites rendszerkörnyezetekben egyaránt futhassanak. Ezen felül a Kernel API-val kapcsolatos információt, valamint annak leírását tartalmazza, hogy a 32 bites alkalmazások hogyan futnak 64 bites kernel alatt.

Bevezetés

A 64 bites platformokhoz – ipf, ppc64, s390x, sparc64, AMD64 és EM64T – készült SUSE LINUX úgy lett kialakítva, hogy a meglévő 32 bites alkalmazások a 64 bites környezetben a »dobozból kivéve«, azonnal futnak. Az ipf-hez az x86, a ppc64-hez a ppc, az s390x-hez az s390, az amd64-hez és em64t-hez pedig az x86 a megfelelő 32 bites platform. Ez a támogatás azt jelenti, hogy a preferált 32 bites alkalmazások továbbra is használhatók, nem kell várni a megfelelő 64 bites átírás megjelenésére. Az aktuális ppc64 rendszer 32 bites módban fut, de 64 bites alkalmazások is futtathatók.

Futási támogatás

Icon-Important.png Alkalmazásverziók közötti ütközések

Ha egy alkalmazás 32 és 64 bites környezethez egyaránt rendelkezésre áll, mindkét verzió egyidejű telepítése valószínűleg problémát okoz. Ilyen esetben válasszon a verziók közül, majd azt telepítse és használja.

A megfelelő végrehajtás érdekében minden alkalmazás függvénytárakat igényel. Sajnos, a könyvtárak 32 és 64 bites változatainak neve megegyezik. Ezeket más módon kell megkülönböztetni.

A ppc64, s390x, sparc64, amd64 és em64t 64 bites platformokra ugyanez a megközelítés érvényes: A 32 bites verzióval való kompatibilitás fenntartása érdekében a könyvtárak ugyanott kerülnek tárolásra, mint a 32 bites környezetben. A libc.so.6 32 bites verziója 32 és 64 bites környezetben egyaránt a /lib/libc.so.6 könyvtárban található.

A 64 bites függvénytárak és objektumfájlok a lib64 nevű könyvtárban találhatók. A 64 bites objektumfájlok, amelyeket általában a /lib, /usr/lib és /usr/X11R6/lib könyvtárban keresnénk, a /lib64, /usr/lib64 és /usr/X11R6/lib64 könyvtárban találhatók. Ez azt jelenti, hogy a /lib, /usr/lib és /usr/X11R6/lib alatt van hely a 32 bites könyvtárak számára, így mindkét verzió fájlneve változatlan marad.

A szómérettől független adatokat tartalmazó objektumkönyvtárak alkönyvtárai nem kerülnek áthelyezésre. Az X11 betűkészletek például továbbra is a megszokott helyen, az /usr/X11R6/lib/X11/fonts alatt találhatók. Ez a séma megfelel az LSB (Linux Standards Base) és FHS (File System Hierarchy Standard) előírásoknak.

Icon-hardver.png ipf

Az ipf és a 64 bites Alpha platform 64 bites könyvtárai a szokásos lib könyvtárakban találhatók. Ebben az esetben se lib64 se lib32 könyvtár nem létezik. Az ipf a 32 bites x86 kódot inkább emulációval hajtja végre. Az alap könyvtárkészlet az /emul/ia32-linux/lib és /emul/ia32-linux/usr/X11R6/lib könyvtárakba van telepítve.

Szoftverfejlesztés

Minden 64 bites architektúra támogatja a 64 bites objektumok fejlesztését. A 32 bites fordítás támogatási szintje az architektúrától függ. Ezek a GCC (GNU Compiler Collection) és Binutils eszközláncának különböző megvalósítási lehetőségei, amelyek tartalmazzák az assemblert (as) és a linkert (ld):

Biarch fordító
32 és 64 bites objektumok egyaránt előállíthatók a biarch fejlesztőkészlet-lánccal. Majdnem minden platformon a 64 bites objektumok az alapértelmezettek. 32 bites objektumok speciális jelzők használatával állíthatók elő. Ez a speciális jelző GCC esetén a -m32 (s390x esetén -m31). A binutils jelzői architektúrafüggők, de a GCC átviszi a megfelelő jelzőt a szerkesztőknek és összeállítóknak. A biarch fejlesztőeszközlánc jelenleg sparc64 (sparc és sparc64 fejlesztést támogat), amd64 (sx86 és amd64 utasítások fejlesztését támogatja), s390x és ppc64 platformokon áll rendelkezésre. Normális esetben ppc64 platformon 32 bites objektumok kerülnek létrehozásra. 64 bites objektumok létrehozásához a -m64 jelzőt kell használni.
Nem támogatott
A SUSE nem minden platformon támogatja 32 bites szoftver közvetlen létrehozását. x86 alkalmazások ipf alatti létrehozásához használja a SUSE LINUX megfelelő 32 bites verzióját.

A biarch fejlesztőeszközlánc lehetővé teszi 32 bites és 64 bites objektumok előállítását. Az alapértelmezett a 64 bites objektumok lefordítása. 32 bites objektumok speciális jelzők segítségével hozhatók létre. GCC esetén ez a speciális jelző a -m32.

A header fájlokat architektúrafüggetlen formában kell megírni. A telepített 32 és 64 bites függvénytáraknak rendelkezniük kell a telepített header fájloknak megfelelő API-val (alkalmazásprogramozási felület). A normál SUSE környezet ennek az alapelvnek megfelelően került kialakításra. Kézzel frissített függvénytárak esetén oldja meg ezeket a problémákat maga.

Szoftverfordítás Biarch platformokon

Ha egy biarch architektúrán más architektúrára akar bináris fájlokat készíteni, akkor telepíteni kell a második architektúra megfelelő függvénytárait. A csomagok neve rpmname-32bit, ha a második architektúra egy 32 bites architektúra, illetve rpmname-64bit, ha a második architektúra egy 64 bites architektúra. Az rpmname-devel csomagok megfelelő header fájljaira és függvénytáraira is szükség van és az rpmname-devel-32bit vagy rpmname-devel-64bit fejlesztési függvénytáraira a második architektúrához.

Egy libaio parancsot használó program lefordításához például egy olyan rendszeren, amelynek második architektúrája 64 bites, az alábbi RPM-ek szükségesek:

libaio-32bit
32 bites futási csomag
libaio-devel-32bit
Header fájlok és függvénytárak a 32 bites fejlesztéshez
libaio
64 bites futási csomag
libaio-devel
64 bites fejlesztési függvénytárakA legtöbb nyílt forrású program egy autoconf alapú programkonfigurációt használ. Ha az autoconf parancs segítségével kíván beállítani egy programot a második architektúrához, a configure parancsfájl megfelelő környezeti változókkal futtatásával írja felül az autoconf normál fordító- és linkerbeállításait.


Icon-example.png Az alábbi példa egy AMD64 vagy EM64T rendszert mutat be, amelyen x86 a második architektúra:
1. Állítsa be az autoconf parancsot 32 bites fordító használatára:

CC="gcc -m32"

2. Utasítsa a linkert 32 bites objektumok feldolgozására:

LD="ld -m elf64_i386"

3. Állítsa be az assemblert 32 bites objektumok előállítására:

AS="gcc -c -m32"

4. Adja meg, hogy a libtool és egyéb függvénytárai az /usr/lib könyvtárból kerüljenek ki:

LDFLAGS="-L/usr/lib"

5. Adja meg, hogy a függvénytárak a lib alkönyvtárban tárolódjanak:

--libdir=/usr/lib

6. Adja meg, hogy a 32 bites X függvénytárak kerüljenek alkalmazásra:

--x-libraries=/usr/X11R6/lib/

Nem kell az összes változót megadni minden programhoz. Alakítsa át őket a megfelelő programhoz.


Icon-example.png Egy példa configure hívás az alábbi módon nézhet ki:

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

Kernelspecifikációk

Az AMD64, ppc64, s390x, és EM64T 64 bites kernelei 64 bites és 32 bites kernel ABI-t (alkalmazás bináris csatoló) is tartalmaznak. Az utóbbi a megfelelő 32 bites kernel ABI-jával azonos. Ez azt jelenti, hogy a 32 bites alkalmazás ugyanúgy tud kommunikálni a 64 bites kernellel, mint a 32 bites kernellel.

Egy 64 bites kernel rendszerhívás 32 bites emulációja nem támogatja a rendszerprogramok által használt API-k nagy részét. Ez a platformtól függ. Ez azt jelenti, hogy csak néhány alkalmazást, például az lspci vagy az LVM adminisztrációs programokat kell lefordítani nem ppc64 platformokon ahhoz, hogy a 64 bites programok megfelelően működjenek.

A 64 bites kernel csak speciálisan ehhez a kernelhez lefordított 64 bites kernelmodulokat tud betölteni. A 32 bites kernelmodulok nem használhatók.

Icon-info.png Ötlet:

Néhány alkalmazás külön kernel által betölthető modulokat igényel. Ha ilyen 32 bites alkalmazást kíván használni egy 64 bites rendszerkörnyezetben, akkor lépjen kapcsolatba az alkalmazás és a SUSE gyártójával annak ellenőrzése érdekében, hogy a kernel által betölthető modul 64 bites verziója és a kernel API 32 bites lefordított verziója rendelkezésre áll-e ehhez a modulhoz.