Folosind compilatorul gnu c

GCC Basics

Compilatorul GCC face parte din proiectul GNU al Fundației pentru Software Liber. GCC este dezvoltat folosind mediul de dezvoltare Open Source ca un odom, la fel ca toate instrumentele GNU, și suportă diferite platforme, inclusiv AIX. GCC reprezintă GNU Compiler Collection (GNU Compiler Collection) și suportă multe limbi de programare precum C, C ++, Obiectiv C, Fortran și Java. În acest articol vom lua în considerare versiunile GCC 3.3.4 și toate versiunile 3.4 pentru versiunile AIX 5.1, 5.2 și 5.3.

Compararea compilatorului GCC cu compilatorul XL C / C ++

Dar există mai multe situații în care utilizarea compilatorului GCC poate fi mai preferabilă. Când aplicațiile sunt scrise folosind API-uri standard și compilate cu compilatoare GNU gcc sau g ++. port-le pe platforme diferite mult mai ușor. GCC are interfețe externe pentru o varietate de limbi de programare care facilitează parsarea codului în aceste limbi. GCC este un compilator portabil și rulează pe majoritatea platformelor disponibile astăzi, sprijinind în același timp cele mai multe procesoare pe 64 de biți. GCC este un cross-compiler dependent de platformă care poate compila orice program, creând un fișier executabil pentru orice platformă, chiar diferit de cel pe care rulează compilatorul GCC. Acest lucru vă permite să compilați software pentru sisteme încorporate care nu au capacitatea de a lucra cu compilatorul. CCG este scris în limba C, cu accent puternic pe portabilitate și se poate compila; acest compilator poate fi ușor adaptat la noile sisteme. În cele din urmă, GCC oferă libertatea de a îmbunătăți GCC și alte programe GNU create de dezvoltatori terți.

Încercările dezvoltatorilor de a-și susține aplicațiile pe diferite platforme utilizând diferite compilatoare pe aceste platforme rareori se termină cu succes. În schimb, dacă utilizați compilatorul GCC, susținut de mai multe platforme, acest lucru va reduce problemele care apar atunci când portați o aplicație de la o platformă la alta. GCC poate facilita munca programatorului oferind un mediu comun de compilare pentru diferite platforme. De asemenea, g ++ este acum mai aproape de respectarea deplină a standardelor ISO / ANSI C ++.

Rețineți că sistemul de operare obișnuit AIX nu înțelege fișierele de configurare GCC. Pentru a putea încărca compilatorul GCC pe AIX, este necesar ca pe acest sistem de operare să existe fișiere GNU. Trebuie să executați comanda make -v pentru a afla ce trebuie să compilați cu GCC.

Compatibilitate binară în AIX 5L

IBM oferă compatibilitate la nivel binar între AIX 5.1, AIX 5.2 și AIX 5.3. Prin urmare, aplicațiile care rulează pe AIX 5.1 sau pe AIX 5.2 vor funcționa la fel în versiunea 5.3 dacă îndeplinesc criteriile stabilite în documentul de compatibilitate binară IBM AIX 5L. În acest sens, putem adăuga că furnizorii de software independenți (ISV în viitor) folosesc diferite moduri de a sprijini noua versiune a sistemului de operare. Majoritatea ISV-urilor le testează cererile de compatibilitate cu noul sistem de operare, de obicei un set de teste, după care ISV solicită suport pentru noul sistem de operare. Cu toate acestea, alte ISV studiază criteriile detaliate de compatibilitate ale IBM la nivel binar și dacă aplicația lor îndeplinește aceste criterii, atunci este considerată compatibilă cu noul sistem de operare. În ambele cazuri, nu este nevoie să recompilați aplicațiile pentru utilizare în AIX 5.3.

Instalarea GCC pe AIX

Instalarea GCC pe AIX este ușor - aveți nevoie doar de codul binar al versiunii GCC corespunzătoare. Fișierele binare pot fi descărcate de pe site-ul Bull AIX Freeware. din aplicația IBM AIX Toolbox pentru aplicații Linux. sau de la Biblioteca de Internet UCLA a Software-ului AIX. După încărcarea fișierului binar corespunzător, trebuie să modificați modul de acces la fișierul descărcat cu comanda chmod. astfel încât să devină executabil, apoi să rulați SMIT pentru instalare. Site-ul web UCLA are un cod binar GCC versiunea 3.3.4 pentru AIX 5.1. Versiunea GCC 3.3.4 este compatibilă la nivel binar cu AIX 5.2. În GCC versiunea 3.3, a fost adăugat suport pentru AIX 5.2.

În prezent, fișierele binare GCC 3.3.2 pentru AIX 5.1 și 5.2 sunt disponibile pe site-ul cu aplicațiile IBM AIX Toolbox for Linux. De asemenea, pe site-ul BULL Freeware există GCC versiunea 3.3.2 pentru AIX 5.2.

Trebuie să vă asigurați că ați instalat versiunea GCC care corespunde versiunii instalate AIX. GCC instalează propriile copii ale unor fișiere de antet care trebuie integrate corect cu fișierele antetului sistemului AIX pentru funcționarea normală a GCC, altfel compilatorul poate primi mesaje de eroare legate de fișierele antet. Fișierele de antet, dacă nu sunt convenite, ar trebui rearanjate. Puteți șterge memoria cache a antetului pentru a compune o nouă versiune GCC din vechiul cod sursă, dar GCC nu va funcționa fără cache-ul antetului.

Link-uri către site-uri Web

Pentru informații mai complete despre proiectul GNU și compilatorul GCC, vizitați site-ul Web oficial. O listă de caracteristici noi în GCC versiunea 3.3 este disponibilă din acest link. De asemenea, o listă de caracteristici noi în GCC versiunea 3.4.3 este disponibilă prin referință.

Opțiunile compilatorului GCC

Pentru GCC, sunt disponibile numeroase opțiuni de compilare, de la optimizarea codului, compilarea cu sau fără standardul ISO / ANSI, la opțiunile de depanare, opțiunile de compilare pentru codul de șablon. GCC oferă și câteva opțiuni specifice numai pentru platformele pSeries (fostă RS / 6000) și PowerPC.

O descriere completă a opțiunilor disponibile pentru platformele POWER și PowerPC este afișată pe pagina Web. Mai jos vom examina mai multe opțiuni pe care le-am găsit deosebit de importante.

Din opțiunile care sunt utilizate pentru configurarea tipului de procesor, de exemplu, -mcpu și -mtune. Este mai bine să utilizați opțiunile standard furnizate de GCC. În AIX 4.3 și AIX 5.1, opțiunile standard sunt -mcpu = comune - acest cod va funcționa pe toate computerele cu procesorul familiei pSeries (RS / 6000). Pe AIX 5.2 și mai târziu, opțiunea standard este -mcpu = powerpc - acest cod va funcționa pe procesoarele pSeries PowerPC. GCC adoptă tipul de procesor modern asociat versiunii actuale AIX, ca model de procesor pentru sarcini de programare.

Pentru a optimiza pentru o anumită clasă de procesor sau procesor, utilizați opțiunea -mcpu = putere. -mcpu = power2. -mcpu = powerpc. -mcpu = power4 și altele. Nu utilizați opțiunea -power. -mpowerpc. -mpower2 sau -mpowerpc64. Deși sunt disponibile, acestea nu sunt destinate utilizării de către utilizatorul final. Utilizarea opțiunii -mpower2 sau a altor opțiuni în mod individual poate provoca rezultate imprevizibile, deoarece compilatorul poate fi într-un mod incompatibil cu procesorul țintă.

Pentru a compila o aplicație în modul pe 64 de biți, ar trebui să utilizați opțiunea -maix64. care activează interfața mașinii pe 64 de biți (ABI mai târziu) a AIX, de exemplu, indicatori pe 64 de biți, tipuri lungi pe 64 de biți și infrastructura necesară pentru a le sprijini. Instalarea -maix64 implică instalarea -mpowerpc64 și -mpowerpc. în timp ce -maix32 dezactivează ABI pe 64 de biți și opțiunea -mno-powerpc64. GCC folosește -maix32 în mod implicit.

Dacă primiți un mesaj de eroare de la linker, care spune că spațiul disponibil TOC (Cuprins) este aglomerat, puteți reduce spațiul TOC cu comanda -mminimal-toc. În mod implicit, GCC folosește funcția -mul-toc. care alocă cel puțin o înregistrare TOC pentru fiecare variabilă unică de referință neautomată. De asemenea, GCC pune constantele punctului variabil în TOC. Cu toate acestea, în TOC sunt disponibile doar 16.384 de elemente și, prin urmare, este posibil să se depășească. Opțiunea GCC -minimal-toc vă permite să atribuiți o singură funcție unui element TOC.

-pthread compilează și asamblează o aplicație cu biblioteca de fire POSIX în același mod ca și cum ar fi fost făcut într-un mediu C / C ++ VisualAge (sau XL). În VisualAge (sau XL) C / C ++, pentru a suporta fluxurile, puteți compila și link-ul utilizând opțiunile xlc_r sau xlC_r. dar aceste opțiuni nu vor funcționa cu GCC. Prin urmare, pentru GCC, codul filetat trebuie să fie legat folosind -pthread. Opțiunea -pthread va stabili steagurile corespunzătoare atât pentru preprocesor, cât și pentru linker.

Opțiunea -g generează informațiile de depanare specifice la -gxcoff + la nivelul 2. Informațiile de depanare pot conține câteva informații suplimentare pentru GNU Debugger (GDB). Pentru a crea informații de depanare mai compatibile cu AIX dbx. utilizați opțiunea -gxcoff.

GCC pentru AIX nu acceptă pe deplin opțiunea -msoft-float. Folosind această opțiune se va opri utilizarea registrelor cu puncte plutitoare în GCC, dar, cu toate acestea, bibliotecile auxiliare GCC și bibliotecile AIX vor continua să utilizeze registrele cu virgulă mobilă.

Utilizarea opțiunilor -mlittle-endian și -mall-linux în configurația AIX nu este corectă. Documentația conține toate opțiunile pentru platformele țintă "rs6000" GCC. Dar nu toate opțiunile sunt disponibile pentru utilizare cu o anumită configurație.

Pentru a transfera opțiuni direct la link-ul AIX dependent de platformă, utilizați -Wl, .

Opțiunile G + și GCC compilator

O descriere a opțiunilor specifice compilatorului g ++ este disponibilă la acest link. Aceste opțiuni sunt valabile și pentru AIX.

De asemenea, o descriere completă a opțiunilor specifice compilatorului gcc este afișată pe pagina Web. Aceste opțiuni sunt valabile și pentru sistemele AIX și alte sisteme UNIX.

Lista de opțiuni pentru optimizare este plasată pe pagină.

Cea mai obișnuită opțiune de optimizare este -O2. care vă permite să creșteți performanța fișierului executabil sau a bibliotecii. -O3 oferă mai multe capabilități de optimizare care pot crește performanța printr-un proces de compilare mai lung. -Os crește performanța și, în același timp, încearcă să reducă dimensiunea codului programului.

Opțiunile suplimentare de optimizare care sunt utile pentru calculele științifice complexe includ -funroll-bucle și -ffast-math. -ffast-matematică. și să permită compilatorului să sporească performanța prin îndeplinirea cu strictețe a standardelor IEEE și ISO pentru funcțiile matematice.

Bibliotecile comune AIX și Unix System V partajate

Să analizăm mai întâi diferențele dintre AIX și Unix System V, care sunt legate de bibliotecile partajate, și apoi să explice cum utilizarea GCC poate crea biblioteci partajate pentru AIX.

AIX și Unix System V tratează în mod diferit bibliotecile de acces partajate. AIX practic tratează obiectele de acces partajate ca entități complete și complete în care referințele la nume sunt aprobate la momentul construirii și nu pot fi modificate la momentul încărcării. Sistemul Unix V vede obiecte comune ca fișiere obișnuite în care toate numele de variabile globale sunt aprobate de linker la momentul executării. Cu toate acestea, AIX are capacitatea de a face legătura de rulare (RTL), astfel încât numele variabilelor pot rămâne nedefinite până la etapa de boot, care va căuta definițiile necesare în toate modulele încărcate.

Un modul partajat pe AIX poate fi un fișier obiect sau un fișier de arhivă care poate conține module pentru partajarea și / sau fișiere obișnuite de obiecte. În sistemul Unix V, bibliotecile partajate sunt întotdeauna fișiere obișnuite care au fost create folosind opțiuni speciale.

Pentru compilatorul GCC, biblioteca partajată este creată cu comanda gcc -share. Constructorul exportă automat numele anumitor elemente, însă dacă trebuie să exportați mai multe elemente, ar trebui să utilizați comanda AIX ld -bexpall. Numele cu un subliniere nu sunt exportate automat. În AIX 5.2 sau AIX 5.1, la cel de-al doilea nivel de întreținere (nivel de întreținere 2), puteți utiliza noua opțiune de construcție - bexpfull. care va exporta toate numele și nu va pierde numele care încep cu un underscore (cum ar fi numele schimbate în C ++). Pentru control complet, este mai bine să creați un fișier de export. Dacă programatorul nu este familiarizat cu fișierele de export AIX, atunci ar trebui să citească documentul AIX Linking and Loading Mechanisms (PDF 184KB).

După cum sa menționat mai sus, comanda gcc-shared creează un obiect codificat în stil AIX pentru partajare. gcc-shared împarte link-ul AIX cu opțiunea -bM: SRE -bnoentry. Prin urmare, nu este nevoie să combinați aceste două opțiuni AIX.

Când folosiți -brtl, link-ul AIX va căuta bibliotecile cu extensii .a și .so. de exemplu, libfoo.a și libfoo.so. Fără opțiunea -brtl, link-ul AIX va căuta doar libfoo.a. Crearea libfoo.a simplu de acces multiplu obiect de arhivare, sau a redenumi un obiect al libfoo.a acces colectiv - pentru AIX este important ca un sufix .a. Pentru a utiliza un pachet AIX la runtime, ar trebui să utilizați GCC comanda -shared -Wl, -G crea acces multiplu un obiect și apoi utilizați biblioteca, care este, adăugând opțiunea -Wl, -brtl în comanda de aspect pentru a crea un fișier executabil. Din punct de vedere tehnic, nu puteți utiliza opțiunea "partajată". Cu toate acestea, această opțiune este inofensivă și reduce confuzia.

Dacă doriți să creați un obiect pentru partajarea cu GCC, aveți nevoie doar de opțiunea gcc-shared și, opțional, de opțiunea -bexpfull sau de un fișier de export care se referă la el -Wl. -Fi:.exp Este simplu.

Posibile probleme când utilizați GCC / G ++ pe AIX

Iată câteva probleme posibile pe care le-ați întâmpina când utilizați GCC sau G ++ pe AIX. Pentru fiecare problemă, oferim o descriere și apoi vă arătăm cum să o rezolvăm.

  • Încercările de a compila GCC pe AIX au ca rezultat un mesaj de eroare de asamblare. Pentru a rezolva acest lucru, trebuie să verificați dacă nu utilizați o versiune mai veche a asamblorului GNU care nu înțelege unele dintre caracteristicile PowerPC. După cum se menționează în instrucțiunile de instalare AIX de pe site-ul Web GNU GCC, este de preferat să folosiți asamblarea AIX.
  • Uneori, în cursul procesului de construire, este posibil să primiți un mesaj de eroare:

    Această eroare poate indica faptul că discul este plin sau că variabila de mediu ULIMIT nu permite fișierului să atingă dimensiunea necesară.

  • G ++ efectuează schimbări de nume într-un mod diferit de Visual C (sau XL). Aceasta înseamnă că fișierele obiect compilate de un compilator nu pot fi utilizate de un alt compilator.
  • Asamblorul GNU (GAS) nu acceptă PIC. Pentru a crea codul PIC, utilizați orice alt asamblor, de exemplu, compilatorul AIX `/ bin / as ', dependent de platformă.
  • În AIX, compilarea unui cod ca acesta:

    va determina linkerul să raporteze un foo undefined. Deși acest comportament diferă de majoritatea celorlalte sisteme, acesta nu este eronat, deoarece redefinirea unei variabile externe într-o variabilă statică nu este definită în ANSI C.

  • „Versiunile CCG înainte de CCG 3.4, nu toate structurile de date sunt transmise prin valoare. GCC 3.4 este acum are un suport mai bun ABI pentru parametrii de transmisie ale structurii. In timp ce aceste modificări crește corespondența dintre CCG și ABI AIX, acestea pot cauza incompatibilități cu codul compilat folosind versiuni anterioare ale CCG Pentru mai multe informații, trebuie să studiezi documentul propus.
  • Când GCC se construiește pentru o versiune anume a AIX, creează câteva fișiere care sunt specifice numai pentru această versiune a sistemului de operare și fișierele antetului său. Aceasta poate fi o problemă atunci când utilizați acest GCC pentru a construi versiuni mai noi de sisteme de operare sau chiar când compilați acest compilator pe un nou sistem de operare. Această problemă apare atunci când se construiește GCC pe AIX 5.2 utilizând GCC compilat pentru AIX 5.1 (sau OS anterioară). AIX 5.2 adaugă suport pentru funcția atoll (). întrucât asamblarea GCC pentru AIX 5.1 include o versiune stocată în cache a stdlib.h care nu conține un prototip al acestei funcții. Valoarea returnată a unei funcții non-prototip este reprezentată implicit în tipul "int" în loc de "long long", motiv pentru care GCC convertește incorect anumite linii. Pentru GCC auto-tuning pe AIX 5.2, trebuie să eliminați fișierul antet "corectat" stdlib.h de la GCC, astfel încât fișierul header AIX 5.2 să fie utilizat. Fișierul cu antetul de sistem poate fi utilizat de vechea construcție GCC pentru auto-reglarea compilatorului.
  • <





    ?php include ($ _SERVER ["DOCUMENT_ROOT"]. "/ vstavki / blokvtext2.php"); ?>

    Mai jos este un exemplu cu mărimea stivei suficient de mare pentru fiecare fir și setul de potrivire corespunzător folosit de GCC pentru a compila un program care folosește pthreads.

    Matricea este distribuită pe stivă, nu în sectorul de date. Problema constă în mărimea stivei pentru flux. Pentru a mări dimensiunea implicită a stivei, utilizați funcțiile adecvate pthread. Fără #ifdef _AIX, codul programului va fi scris în fișierul cu memorie.

    Descărcați resurse

    Subiecte conexe

    • "Utilizarea compilatorului GNU C / C ++ pe AIX: articolul original.
    • Pagina principală GCC Gnu. site-ul cu informații detaliate despre GCC. (RO)
    • Bull AIX Freeware. diverse software open source pentru AIX.
    • IBM AIX Toolbox pentru aplicații Linux. Informații de descărcare sunt disponibile pe această pagină.
    • Zona developerWorks AIX și UNIX conține sute de articole informative pentru cititorii de niveluri primare, secundare și avansate.






    Articole similare

    Trimiteți-le prietenilor: