Használata GNU C fordító

GCC alapjai

GCC fordító része a Free Software Foundation GNU. GCC fejlesztett nyílt forráskódú fejlesztőkörnyezet Odom, mint minden a GNU eszközök, és támogatja a különböző platformok, köztük AIX. GCC jelentése gcc (gcc) és számos programozási nyelvek, mint a C, C ++, Objective C, Fortran és Java. Ebben a cikkben fogjuk vizsgálni a GCC 3.3.4 verzió és az összes verzió 3.4 AIX változat 5.1, 5.2 és 5.3.

Összehasonlítás GCC fordító fordítóprogram XL C / C ++

De vannak olyan helyzetek, amikor a használata GCC előnyösebb lehet. Amikor egy alkalmazás írt használatával az API szabványos és alkalmazásával összeállított a fordító vagy GNU gcc g ++. port, hogy a különböző platformok sokkal egyszerűbb. GCC külső kapcsolódási pontok a különböző programozási nyelvek, amelyek megkönnyítik elemezni a kódot ezeken a nyelveken. GCC egy hordozható fordító és fut a legtöbb platformon elérhető ma, és ezzel egyidejűleg támogatja a legtöbb 64 bites processzorok. GCC egy platform-függő határon fordító, amely képes lefordítani bármilyen programot a futtatható bármely platformon, akár eltérő az, ahol dolgozik GCC fordító. Ez lehetővé teszi, hogy lefordítani a szoftvert a beágyazott rendszerek, amelyek nem rendelkeznek a lehetőséget, hogy a fordító. GCC C-nyelven írt egy nagy hangsúlyt fektet a hordozhatóság és állíthatja össze magát; Ez fordító könnyen alkalmazkodik az új rendszereket. Végül GCC biztosítja a szabadságot, hogy javítsa a GCC és egyéb GNU szoftver által létrehozott külső fejlesztők.

Kísérletek támogatás fejlesztők végre az alkalmazások különböző platformokon különböző fordítóprogramok ezeken a platformokon, ritkán érnek véget sikeresen. Ha ehelyett használni a GCC fordító által támogatott számos platformon, akkor csökken a kapcsolódó problémák számhordozás alkalmazások egyik platformról a másikra. GCC megkönnyítheti programozási munkát azáltal, hogy közös keretet összeállítása a különböző platformokon. G ++ is már közelebb teljes mértékben megfelel az ISO / ANSI C ++ szabvány.

Megjegyezzük, hogy a hagyományos AIX operációs rendszer nem érti a GCC make-fájlokat. Annak érdekében, hogy képesek legyenek letölteni GCC fordító AIX, az szükséges, hogy az operációs rendszer már a GNU make-fájlokat. Annyit kell tennie, hogy -v parancsot, hogy megtudja, mit kell fordítani a GCC.

Kompatibilitás bináris AIX 5L

Az IBM biztosítja a kompatibilitást a bináris változatai az operációs rendszer AIX 5.1, AIX 5.2 és AIX 5.3. Következésképpen futó alkalmazások AIX 5.1 vagy AIX 5.2, működni fog ugyanúgy és a változat 5.3, ha a fejlődésük elérték a meghatározott kritériumokat a dokumentum az IBM AIX 5L bináris kompatibilitást. Hozzá kell tenni, hogy a független szoftvergyártók (ISV a jövőben) különböző módon támogatja az új operációs rendszer. A legtöbb vezető ISV tesztelhetik alkalmazásaik kompatibilitását az új operációs rendszer, általában néhány sor vizsgálatok, amelyek a befejezése a ISV támogatását fejezte ki az új operációs rendszer. Azonban más ISV vizsgálták részletesen kritériumok kompatibilitása bináris szintű kód IBM által kifejlesztett, és ha azok alkalmazása megfelel ezeknek a kritériumoknak, akkor azt kompatibilis az új operációs rendszer. Mindkét esetben nincs szükség újrafordítani alkalmazások alatti használatra OS AIX 5.3.

Telepítése GCC AIX

Telepítse GCC AIX egyszerűen - ehhez csak a bináris kód megfelelő változatát GCC. A bináris fájlok letölthetők Bull AIX ral. Az IBM AIX Toolbox for Linux alkalmazások oldalon. vagy UCLA AIX Software véleményét! online könyvtári. A letöltés után a megfelelő bináris fájl, meg kell változtatni a hozzáférési mód, hogy a letöltött fájlt a chmod paranccsal. hogy ez végrehajtható, és futtassa SMIT telepíteni. A Web-site UCLA egy bináris kód GCC 3.3.4 verzió AIX 5.1. GCC 3.3.4 verziója kompatibilis bináris szinten AIX 5.2. A GCC 3.3-as verziója már támogatja a teljes AIX 5.2.

Abban a pillanatban, a helyszínen az IBM AIX Toolbox for Linux alkalmazások GCC 3.3.2 bináris AIX 5.1 operációs rendszer és a 5.2. Az oldalon is van egy bika Freeware GCC 3.3.2 verzió Windows AIX 5.2.

Meg kell győződnie arról, hogy a telepített GCC, megfelelő változat AIX. GCC határozza meg a saját példányát néhány fejléc fájlokat kell integrálni megfelelően a header fájlokat AIX normális működéséhez a GCC, kivéve, ha a fordító lehet hibaüzenetek társított fejléc fájlokat. Header fájlok, ha nem születik megállapodás, újra kell elrendezni. Törölheti a cache header fájlt, hogy össze egy új kiadás a régi GCC forráskód, de GCC nem fog működni anélkül, hogy a cache fejléceket.

Linkek web-oldalak

További teljes körű tájékoztatást a GNU Projekt és a GCC fordító kellene látogatnia a hivatalos honlapján. Az új funkciók listája GCC 3.3-as verziója elérhető ezen a linken. Továbbá, az új funkciók a GCC 3.4.3 verzió elérhető itt.

GCC fordító opciók

számos fordítási lehetőség áll rendelkezésre GCC, kezdve optimalizálja a kódot, összeállítják, az ISO / ANSI szabványok vagy anélkül ezek a hibakeresés opciók összeállítása lehetőségek sablon kódját. GCC is nyújt különleges lehetőségek pSeries (egykori RS / 6000) és a PowerPC platformokon.

Teljes leírás a rendelkezésre álló lehetőségek a POWER platformon PowerPC gépek helyezni a web-oldal. Az alábbiakban nézzük meg néhány lehetőséget, hogy igen fontosnak tekintik.

A lehetőségek, amelyek segítségével beállíthatja a processzor típusát, például, és -mcpu -mtune. jobb a szabványos lehetőségek GCC által. AIX 4.3 AIX 5.1 szabvány opciók -mcpu = gyakori - ez a kód működik minden számítógép a processzor család pSeries (RS / 6000). AIX 5.2 és későbbi változatai, a szabványos lehetőség -mcpu = PowerPC - ez a kód fog futni pSeries PowerPC processzorokat. GCC vesz egy modern processzor típusa kapcsolatos jelenlegi verzió AIX, mint a processzor modell ütemezési feladatokat.

Ahhoz, hogy optimalizálni egy adott processzor vagy osztály processzorok kell használni -mcpu = teljesítmény lehetőségeket. -mcpu = Power2. -mcpu = PowerPC. -mcpu = Power4 és mások. Ne használjon -mpower opciót. -mpowerpc. -mpower2 vagy -mpowerpc64. Annak ellenére, hogy nem állnak rendelkezésre, azok nem használhatják a végfelhasználó által. A használata külön -mpower2 vagy egyéb lehetőségek opciók vezethet kiszámíthatatlan eredményeket, mert a fordító lehet inkompatibilis módban, a cél processzor.

A fordításhoz az alkalmazás 64 bites módban használja a lehetőséget -maix64. amely aktiválja a 64 bites gép interfész (ABI később) AIX, például a 64 bites mutató, 64-bit hosszú fajta, és a szükséges infrastruktúrát, hogy támogassa őket. Telepítés -maix64 jár telepítés -mpowerpc64 és -mpowerpc. mivel -maix32 letiltja a 64 bites opciót és ABI -mno-powerpc64. alapértelmezett GCC -maix32.

Ha hibaüzenet jelenik meg a kapcsoló, amely megállapította, hogy a zsúfolt hely áll TOC (Table of Contents - tartalomjegyzék), csökkenti a TOC tér segítségével -mminimal-toc parancsot. Alapértelmezésben GCC -mfull-toc. amely rendelkezésre bocsátja legalább egy TOC-rekord minden egyedi nem automatikus változó referencia. GCC is hozza a TOC lebegőpontos állandók. Azonban csak 16 384 darab a tartalomjegyzékben, és így nagyon is lehetséges, hogy töm. Opció -mminimal-toc GCC lehetővé teszi, hogy egy vonalban az egyik eleme a TOC egy funkció.

-pthread összeállítja és alkalmazás könyvtár POSIX szálak azonos módon, mint ez elvégezhető egy közegben VisualAge (vagy XL) C / C ++. A VisualAge (vagy XL) C / C ++ podderzhkt jelfolyamokat végre összeállítása és összekapcsolása segítségével xlc_r opciók vagy xlC_r. de ezek a megoldások nem működnek GCC. Ezért a GCC kódot szál támogatás kell konfigurálni -pthread. Opció -pthread telepítse a megfelelő zászlók mindkét előfeldolgozó és kapcsoló.

A -g teremt hibakeresési információkat jellemző -gxcoff + 2. szint hibakeresés információt tartalmazhat néhány extra információt a GNU Debugger (GDB). Ahhoz, hogy a hibakeresési információkat jobban összeegyeztethető AIX dbx. használja a -gxcoff.

GCC AIX nem támogatja teljes mértékben -msoft-float opciót. Ezen opció használata leállítja a használata lebegőpontos regiszterek a GCC, de ugyanakkor GCC támogató könyvtár és AIX könyvtár továbbra is használni lebegőpontos regiszterek.

Opciók használata -mlittle-endian és -mcall-linux AIX konfiguráció nem megfelelő. A dokumentáció tartalmazza az összes lehetőséget célrendszert „RS6000” GCC. De nem minden opció áll rendelkezésre használható bármely adott konfigurációt.

A pass opciók közvetlenül a platform-specifikus linker AIX, használja -Wl, .

Options fordító G ++ és a GCC

Leírás különleges lehetőségek a g ++ fordítóprogram található ezen a linken. Ezek a beállítások érvényesek AIX.

A gcc fordítóhoz tartozó opciók teljes leírását a weboldalon is fel kell tüntetni. Ezek a beállítások az AIX és más UNIX rendszerekre is érvényesek.

Az optimalizálási lehetőségek listája az oldalra kerül.

A legáltalánosabb optimalizálási lehetőség az -O2. amely lehetővé teszi a végrehajtható fájl vagy könyvtár teljesítményének növelését. Az O3 több olyan optimalizálási képességet biztosít, amely hosszabb összeállítási folyamaton keresztül növelheti a teljesítményt. -A növeli a teljesítményt és ugyanakkor megpróbálja csökkenteni a kód méretét.

A komplex tudományos számításokhoz hasznos kiegészítő optimalizálási lehetőségek: -funkció-hurkok és -teljes matematika. -ffast-matek. és lehetővé teszi a fordító számára a teljesítmény növelését azáltal, hogy pontosan megfelel az IEEE és az ISO szabványoknak a matematikai funkciókhoz.

AIX és Unix System V megosztott könyvtárak

Nézzük először nézd meg a különbségeket AIX és Unix System V tartozó, a megosztott könyvtárban, majd elmagyarázza, hogyan kell használni a GCC, akkor hozzon létre egy megosztott könyvtár AIX.

Az AIX és a Unix System V eltérő módon kezeli a megosztott hozzáférési könyvtárakat. Az AIX alapvetően úgy kezeli a megosztott hozzáférési objektumokat, mint teljes mértékben kapcsolt és teljes entitásokat, amelyekben a névre vonatkozó hivatkozások építéskor jóváhagyásra kerülnek, és nem változtathatók meg indításkor. A Unix System V a megosztott objektumokat rendes objektumfájlként látja, amelyben a globális változók nevét a linker a futás idején jóváhagyja. Azonban AIX képes tenni az elrendezés a futási időben (run-time összekötő (RTL)), így a változó nevek bizonytalan marad, amíg a boot, amely megkeresi a szükséges vizsgálatokat az összes betöltött modulokat.

Az AIX megosztott modulja objektumfájl vagy archív fájl lehet, amely tartalmazhat modulokat a megosztáshoz és / vagy a közönséges objektumfájlokhoz. A Unix System V rendszerben a megosztott könyvtárak mindig olyan hagyományos fájlok, amelyeket speciális beállításokkal hoztak létre.

Az GCC fordítóhoz a megosztott könyvtárat a gcc -share paranccsal hozza létre. A linker automatikusan exportálja a nevét néhány elem, de ha azt szeretnénk, hogy export több elemet használja AIX ld -bexpall csapat. Az aláhúzás alá eső nevek nem kerülnek automatikusan exportálásra. Az AIX 5.2 vagy AIX 5.1 rendszerben, a második karbantartási szinten (2. karbantartási szint) használhatja az új build opciót -bexpfull. amely exportálja az összes nevet, és nem fogja figyelmen kívül hagyni az aláhúzással kezdődő neveket (például a megváltoztatott neveket C ++-ban). A teljes ellenőrzés érdekében a legjobb, ha létrehoz egy exportfájlt. Ha a programozó nem ismeri AIX export fájlokat, akkor olvassa el a dokumentum AIX összekapcsolása és betöltése Mechanizmusok (Mechanizmusok elrendezés és AIX letölthető) (PDF 184KB).

Mint fentebb említettük, a gcc -shared parancs létrehoz egy kemény kódolt objektumot az AIX stílusban a megosztáshoz. A gcc -shared meghívja az AIX linkert a -bM opcióval: SRE -bnoentry. Ezért nem szükséges kombinálni a két AIX opciót.

Az -brtl használata esetén az AIX hivatkozó az .a és az .so kiterjesztésekkel rendelkező könyvtárakat keres. például libfoo.a és libfoo.so. Az -rrtl opció nélkül az AIX linker csak a libfoo.a-t keres. Készítsen libfoo.a egyszerű archiválás célja többszörös hozzáférés, vagy átnevezni célkitűzése a közösségi hozzáférést libfoo.a - AIX fontos, hogy egy utótag .a. Ahhoz, hogy használni AIX csomag futásidőben, akkor használd ezt a parancsot gcc -shared -Wl, -G létre többszörös hozzáférés egy objektumot, majd a könyvtár, azaz, hozzátéve -Wl lehetőség, -brtl az elrendezés paranccsal hozzon létre egy futtatható fájl. Technikailag nem használhatja a megosztott opciót. Ez a lehetőség azonban ártalmatlan, és csökkenti a zavart.

Ha azt szeretnénk, hogy hozzon létre egy objektumot közös használatú a GCC kell, de csak a gcc -shared és esetleg lehetőség -bexpfull vagy exportfájlt hivatkozva magát -Wl. -bE:.exp Egyszerű.

Lehetséges problémák GCC / G ++ használata AIX rendszeren

Íme néhány lehetséges probléma, amelyek akkor találkozhatnak, ha GCC-t vagy G ++-t használ az AIX rendszeren. Minden egyes problémára leírást adunk, majd megmutatjuk, hogyan oldhatja meg.

  • Az AIX-re vonatkozó GCC-k összeállításának kísérlete összeszerelő hibaüzenetet eredményez. A probléma megoldásához ellenőriznie kell, hogy nem használja-e a GNU összeszerelő régebbi verzióját, amely nem érti a PowerPC-funkciók egy részét. Amint azt az AIX telepítési utasításai a GNU GCC weboldalán jelezték, célszerű az AIX szerelőt használni.
  • Előfordulhat, hogy a build folyamat során hibaüzenet jelenhet meg:

    Ez a hiba azt jelezheti, hogy a lemez tele van, vagy hogy az ULIMIT környezeti változó nem teszi lehetővé a fájlnak a kívánt méret elérését.

  • A G ++ a névváltoztatásokat eltérő módon végzi, mint a VisualAge (vagy XL) C ++. Ez azt jelenti, hogy egy fordító által összeállított objektumfájlokat egy másik fordító nem használhatja.
  • A GNU szerelő (GAS) nem támogatja a PIC-t. A PIC-kód létrehozásához használjon más szerelőket, például a platform-függő AIX `/ bin / as 'fordítót.
  • Az AIX-ban egy ilyen kód összeállítása:

    a linker egy nem definiált foo-t jelent. Bár ez a viselkedés eltér a legtöbb egyéb rendszertől, ez nem téves, mivel egy külső változónak egy statikus változóba történő újradefiniálását az ANSI C nem határozza meg.

  • „A GCC előtti verziókban GCC 3.4, nem minden adatszerkezetek érték szerint adódnak át. GCC 3.4 most már jobb ABI támogatását az átviteli paramétereket a szerkezet. Bár ezek a változások növelik a levelezés a GCC és az AIX ABI, akkor is okozhat összeférhetetlenséggel kóddal összeállított a GCC korábbi verzióinak használata További információkért tanulmányozza a javasolt dokumentumot.
  • Amikor az GCC épít egy adott AIX verzióhoz, létrehoz néhány fájlt, amely csak az operációs rendszer és a fejlécfájljainak ezen verziójára jellemző. Ez problémát jelenthet, ha ezt az új GCC-alapú verziót használja újabb verziókra, vagy akár akkor is, ha ezt a fordítót új operációs rendszerre fordítja. Ez a probléma akkor fordul elő, amikor az ACC 5.1-es verzióra (vagy korábbi operációs rendszerre) fordított GCC használatával GCC-t épít az AIX 5.2-re. Az AIX 5.2 támogatja az atoll () függvényt. míg az AIX 5.1-hez tartozó GCC-egység az stdlib.h gyorsítótárazott verzióját tartalmazza, amely nem tartalmaz prototípust a funkcióról. Visszatérési érték neprototipirovannoy alapértelmezett funkció miatt a típus „int” helyett a „hosszú-hosszú”, mert amit a GCC helytelenül alakítja egyes törzsek. Hogy betöltse GCC AIX 5.2, el kell távolítania a GCC „korrigált” stdlib.h header fájlt úgy, hogy használja AIX 5.2 header fájlt. A rendszer header fájlt lehet használni, hogy össze a régi GCC fordító betöltő.
  • Az alábbiakban egy példát mutatunk be, ha mindegyik szálnak elég nagy stackmérete van, és a megfelelő makefile, amelyet az GCC egy olyan program összeállításához használ, amely pthreadeket használ.

    A tömb a veremen van elosztva, nem az adatszektorban. A probléma a patak méretéhez tartozik. Az alapértelmezett veremméret növeléséhez használja a megfelelő pthread funkciókat. A #ifdef _AIX nélkül a programkód a dump fájlba kerül.

    Források letöltése

    Kapcsolódó témák

    • "A GNU C / C ++ fordító használata az AIX rendszeren: az eredeti cikk.
    • GCC Gnu honlap. weboldal részletes információkkal az GCC-ről. (EN)
    • Bull AIX Freeware. különböző nyílt forráskódú szoftverek AIX számára.
    • IBM AIX Toolbox Linux alkalmazásokhoz. A letöltési információk ezen az oldalon találhatók.
    • A developerWorks AIX és UNIX zóna több száz informatív cikket tartalmaz az alap-, közép- és felsőfokú olvasók számára.

    Kapcsolódó cikkek