Dokumentáció/SL9.3/Rendszer/32 és 64 bites alkalmazások 64 bites rendszerkörnyezetben
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
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.
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.
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.
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.