A GCC (GNU Compiler Collection) hogyan éri el a platformfüggetlenséget?
Ez most nagyon idióta példa lesz, de mondjuk írsz egy progit, ami kiírja a képernyőre, hogy "Hello World!"
Ha ezt x86 (PC) architektúrára fordítod, akkor az ahhoz tartozó függvénykönyvtárakból veszi a fordító, hogy hogyan is kell bármit is kírni, és az a kód fog bekerülni a progiba.
Ha ugyanezt valami ARM-szerű, androidos mobil platformra fordítod, akkor meg az ehhez tartozó könyvtárak vannak megadva a fordítónak, hogy ezeket használja. Ugyanazt az utasítást fordítja, de az implementációt (assembly kódsorozatot) egy másik könyvtárból (lib-ből) veszi.
A fordítónak meg kell adni, milyen libeket használjon. (Rendszerint azokat, amikhez a header fájlokat be-includoltad.) Ilyenkor dől el, milyen platformra fordul.
Aztán hogy ez minden esetben működik-e, azt nem tudom, de elvileg igen. :)
Összefoglalva:
Ha van egy programom ×86-os architektúrán készítve, van egy leportolt GCC fordítóm és a hozz egy ASM generálóm egy adott más architektúrán, megadom a fordítónak, hogy az "új" libeket használja. Mivel az utasítások viszont ugyanazok a program láss csodát ELINDUL!
De ha rosszul értettem javítsatok ki!
Az operációs rendszer függetlenség más kérdés.
A standard input, memóriakezelés, stb. úgy vannak megalkotva, hogy operációs rendszer függetlenek legyenek.
Ez a gyakorlatban azt jelenti, hogy ha ezek használatával alkotsz meg bármilyen programot, az rendszerfüggetlen lesz.
Kizárni viszont nem zárja ki a rendszerfüggőséget a C++ szabvány. Ez a gyakorlatban azt jelenti, hogy a C++ programok egy részhalmaza rendszerfüggetlen is.
Ha viszont az egész nyelv nem lenne rendszerfüggő, az azt jeleneté, hogy maga a nyelv nagyon korlátozott képességű. Hiszen, ha a nyelv teljesen rendszerfüggetlen lenne, akkor nem tudna olyan hardvereket és szoftvereket használni, amik a szabványban nincsenek rögzítve. Tehát pl. ha a C++ szabványban nincs benne, hogy hogyan kell kezelni egy USB-s egeret, akkor ezt nem lehet rendszerfüggetlen módon megoldani. Ebből kifolyólag a rendszerfüggetlenség azt jelentené, hogy nagyon korlátozottan tudnád használni a nyelvet.
Vagyis a C++ hál' istennek nem rendszerfüggetlen. :)
Na igen, egyrészt a lefordított kódnak meg kell felelnie egyrészt az architektúrának, másrészt az oprendszernek, ami alatt futni fog. Ezek azért a gyakorlatban összepárosíthatók, mert pl. x86-ra leginkább Win vagy Linux alá fordítunk, ARM-re Android alá, stb. Se az tény, hogy mindkettő fontos.
Amikor egy rendszeren, pl. Windowson fordítasz Windowson futó progit, az az alap eset. Ha mondjuk Windowson fordítasz Linux alá szánt progit, akkor az ahhoz szükséges fordítót hívják "keresztfordítónak", vagy cross-compilernek. Ehhez valóban a Linux-os libek kellenek, de egy ugyanilyen fordító is kell. Tehát a teljes kereszt-fordító "csomag". Ilyen cross-compiler-eknél meg szokták adni a "target" rendszert, tehát hogy milyen környezetben, milyen oprendszer alatt futó kódot generál. (Vagy néha oprendszer nincs megadva, mert pl. valamilyen konktroller IC-be való kódot fordít, ahol mondjuk nincs semmilyen oprendszer. Vagy épp egy oprendszert írunk/fordítunk. :D)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!