Compilatorul de limbi c, c, obiectiv c gcc 2

Următoarea este o procedură pentru instalarea GNU CC pe un sistem Unix. Consultați [Instalarea pe VMS], pentru sistemele VMS. În această secțiune, considerăm că compilați în același director care conține fișierele sursă; consultați [Alte directoare] pentru a afla cum să compilați într-un director separat pe un sistem Unix.







Dacă utilizați GNU CC cu asamblarea GNU (GAS), trebuie să specificați acest lucru cu opțiunea `- c-gnu-as 'atunci când executați' configure '.

Folosind această opțiune nu se instalează GAS. Modifică doar producția GNU CC astfel încât să funcționeze cu GAS. Construirea și instalarea GAS este sarcina dumneavoastră.

În schimb, dacă nu doriți să utilizați GAS și nu specificați "--with-gnu-as" atunci când construiți GNU CC, este de datoria dumneavoastră să vă asigurați că GAS nu este instalat. GNU CC caută un program cu numele ca în diferite directoare; dacă programul pe care îl găsește este GAS, atunci lansează GAS. Dacă nu sunteți sigur unde GNU CC găsește asamblarea pe care o utilizează, încercați să specificați "-v" când îl porniți.

Sistemul în cazul în care este important, dacă utilizați GAS: `hppa1.0-orice-orice '` hppa1.1-orice-orice', `i386-orice-SysV '` i386-orice-isc', `i860-lyubaya- bsd ' `m68k-bull-sysV',` m68k-cp-hpux ' `m68k-Sony-BSD',` m68k-Altos-sysV ' `m68000-cp-hpux',` m68000-ATT-sysV ' , "ANY-lynx-lynxos" și "mips-any"). În orice alt sistem, `--with-gnu-as 'nu are efect.

Sistemele enumerate mai sus (cu excepția HP-PA, ISC 386 si `MIPS-SGI-irix5. * '), Dacă utilizați GAS, ar trebui să utilizați, de asemenea, linker-ul GNU (și specificați -with-gnu żn-ld' ).

Specificați opțiunea `--with-gnu-ld 'dacă intenționați să utilizați link-ul GNU cu GNU CC.

Această opțiune nu forțează instalarea linkerului GNU; modifică numai comportamentul GNU CC astfel încât să funcționeze cu link-ul GNU. În special, interzice instalarea programului "collect2", care altfel servește ca interfață externă pentru link-ul de sistem în majoritatea configurațiilor.

În sistemele bazate pe MIPS și pe sistemele Alpha, trebuie să determinați dacă GNU CC ar trebui să creeze un format normal de depanare ECOFF sau să utilizeze statistici de tip BSD transmise prin tabelul cu simboluri ECOFF. Formatul normal de depanare ECOFF nu se poate ocupa complet de alte limbi decât C. Formatul stabiliilor BSD se poate ocupa de alte limbi, dar funcționează numai cu depanatorul GNU-GDB.

În mod normal, GNU CC utilizează în mod implicit formatul ECOFF de depanare; dacă preferați stadiile BSD, specificați `--with-stabs 'atunci când configurați GNU CC.

Indiferent de ce implicit alegeți atunci când configurați GNU CC, utilizatorul poate folosi opțiunile `-gcoff 'și' -gstabs + 'pentru a specifica în mod explicit formatul de depanare pentru o anumită compilație.

"--with-stabs" are de asemenea o valoare în sistemul ISC la 386 dacă se utilizează "--with-gas". Aceasta include folosirea de informații de depanare stab'ov încorporate în ieșirea de COFF'a. Acest tip de informații de depanare este bine susținut de C ++; Informațiile obișnuite despre depanarea COFF nu fac acest lucru.

`--with-stabs 'este, de asemenea, important în sistemele care rulează pe 386 care execută SVR4. Acesta include utilizarea de informații de depanare stabil'ov construit în ieșirea de ELF'a. În prezent, compilatorul C ++ (2.6.0) nu acceptă informații de depanare DWARF, utilizate în mod obișnuit pe 386 platforme SVR4; stinghiile oferă o opțiune de lucru. Aceasta necesită gaze și gdb, deoarece instrumentele SVR4 convenționale nu pot genera sau interpreta stări.

Următoarele tipuri de procesoare sunt enumerate mai jos:

Următoarele sunt numele companiei cunoscute. După cum puteți vedea, abrevierile uzuale sunt folosite mai des decât numele oficial mai lung.

Numele companiei este important doar pentru rezolvarea ambiguităților, atunci când restul informațiilor specificate nu sunt suficiente. Omiteți-o scriind doar "procesor-sistem", dacă nu este necesar. De exemplu, "vax-ultrix4.2" este echivalent cu "vax-dec-ultrix4.2".

Mai jos este o listă de tipuri de sisteme:

Puteți să omiteți tipul de sistem, apoi `configurați 'ghiceste sistemul de operare de la procesor și companie.

Puteți adăuga numărul versiunii la tipul de sistem; poate sau nu poate face diferența. De exemplu, puteți scrie "bsd4.3" sau "bsd4.4" pentru a distinge între versiunile BSD. În practică, numărul de versiuni este cel mai necesar pentru "sysv3" și "sysv4", care sunt deseori manipulate diferit.

Dacă specificați o combinație imposibilă de tip `i860-dg-SMN„ este posibil să primiți un mesaj de eroare de la Configure żn“, sau poate ignora informațiile și de a face cel mai bun posibil cu restul. "configure" întotdeauna imprimă numele canonic pentru varianta pe care o folosea. GNU CC nu oferă toate opțiunile posibile.

Adesea, un model de mașină individuală are un nume. Multe nume de mașini sunt recunoscute ca aliasuri pentru combinațiile procesor / companie. Există un tabel cu nume de mașini cunoscute:

Nu uitați că numele mașinii determină atât tipul de procesor, cât și numele companiei. Dacă doriți să instalați propriile fișiere de configurare ale propriei dvs. producții, puteți utiliza numele local ca denumire a companiei. Dacă utilizați configurația "procesor-local", numele de configurare fără prefixul procesorului este folosit pentru a construi numele fișierului de configurare.







Astfel, dacă specificați m68k-local, configurația folosește fișierele "m68k.md", "local.h", "m68k.c", "xm-local.h", "t-local" local ", toate în directorul" config / m68k ".

Dacă doriți să construiți fișiere obiect și executabile într-un director diferit de fișierele sursă, de mai jos este ceea ce ar trebui să faceți diferit:
  1. Asigurați-vă că aveți o versiune Make care acceptă capacitatea "VPATH". (GNU Make îl susține, așa cum face și pe majoritatea sistemelor BSD).
  2. Dacă ați rulat vreodată `configure 'în directorul sursă, trebuie să anulați configurația. Faceți acest lucru făcând:
  3. Navigați la directorul în care doriți să construiți compilatorul înainte de a executa `configure ': În sistemele care nu acceptă linkuri simbolice, acest director trebuie să fie pe același sistem de fișiere cu directorul sursă.
  4. Specificați unde să găsiți `configure 'atunci când îl executați: De asemenea, spune" configure "unde să găsească sursa compilatorului; `configure 'ia un director din numele fișierului folosit pentru a-l apela. Dar dacă doriți să fiți sigur, puteți specifica directorul sursă utilizând opțiunea `--srcdir '. Directorul pe care îl specificați cu `--srcdir 'nu trebuie să fie același director ca` configure'. Acum, puteți rula "face" în acest director. Nu trebuie să repetați pașii de configurare afișați mai sus, dacă schimbați în mod normal fișierele sursă. Cu toate acestea, trebuie să executați din nou "configure", dacă schimbați fișierele de configurare, dacă sistemul dvs. nu acceptă linkuri simbolice.
GNU CC poate funcționa ca CrossCompiler pentru multe mașini, dar nu pentru toată lumea.
  • Cross-compilatoare între mașini cu formate diferite de un punct plutitor nu sunt toate făcute de lucru. GNU CC are acum un emulator cu virgulă mobilă, cu care pot lucra, dar fiecare descriere a mașinii țintă trebuie modificată pentru a profita de acest avantaj.
  • Copierea între mașini cu diferite dimensiuni de cuvinte este oarecum problematică și, uneori, nu funcționează.

Deoarece GNU CC generează codul de asamblare, probabil că aveți nevoie de un asamblator încrucișat pentru a permite executării GNU CC, generând fișiere obiect. Dacă nu doriți să vă conectați la mașina țintă, aveți nevoie și de un agent de reticulare. De asemenea, aveți nevoie de fișiere de antet și de biblioteci potrivite pentru mașina țintă, pe care le puteți instala pe mașina gazdă.

Pașii de încrucișare

Compilarea și executarea programelor utilizând un crosscompiler include mai mulți pași:
  • Rulați crosscompiler pe mașina gazdă pentru a genera fișiere de asamblare pentru mașina țintă. Acest lucru necesită fișiere antet pentru mașina țintă.
  • Compilarea fișierelor produse de compilatorul încrucișat. Puteți face acest lucru fie prin asamblare pe mașina țintă, fie printr-un crossover pe mașina gazdă.
  • Conectați aceste fișiere pentru a crea un fișier executabil. Puteți face acest lucru și cu un linker pe mașina țintă sau cu un agent de reticulare pe mașina gazdă. Indiferent de mașina pe care o utilizați, aveți nevoie de biblioteci și de anumite fișiere de pornire (de obicei, "crt.") Pentru mașina țintă.
Este foarte convenabil să faceți toți acești pași pe aceeași mașină principală, deoarece puteți face acest lucru într-un singur apel la GNU CC. Acest lucru necesită un cross-assembler și agent de reticulare adecvat. Pentru unele mașini-țintă GNU, sunt disponibile asamblor și linker.

Configurarea CrossCompiler

Pentru a construi GNU CC ca crosscompiler, începeți cu `configure '. Utilizați "--target = target" pentru a specifica tipul de mașină vizată. Dacă "configure" nu a putut identifica corect sistemul pe care îl executați, specificați și "--build = building". De exemplu, mai jos se arată cum se configurează un crosscompiler care produce codul pentru un sistem HP 68030 cu un sistem BSD, care `configura 'poate identifica corect:

Seturi de instrumente și biblioteci pentru Crosscompilator

Dacă aveți un crossassembler și un crosslinker, trebuie să le instalați acum. Puneți-le în directorul `/ usr / local / target / bin '. Există un tabel de instrumente pe care ar trebui să îl includeți în acest director: `ca '

Trebuie să fie un crossover.

Trebuie să fie un agent de reticulare.

Ar trebui să fie un arhivator încrucișat: un program care poate gestiona fișiere arhivate (biblioteci de link-uri) în formatul mașinii vizate.

Ar trebui să fie un program pentru a crea un tabel de ID într-un fișier de arhivă. Instalarea GNU CC va găsi aceste programe în acest director și să le copiați sau să le compuneți în locurile corespunzătoare pentru crosscompiler, astfel încât să le găsească mai târziu în execuție.

Cea mai ușoară modalitate de a furniza aceste fișiere este de a construi un pachet Binutils și GAS. Configurați-le cu aceleași "--host" și "--target" pe care le utilizați pentru a configura GNU CC, apoi construiți și instalați-le. Ei instalează executabilele lor automat în directorul corespunzător. Dar nu suportă toate mașinile țintă pe care le susține GNU CC.

Dacă doriți să instalați biblioteci pentru utilizarea cu crosscodere, cum ar fi biblioteca C standard, puneți-le în directorul `/ usr / local / target / lib '; Instalarea GNU CC copiază toate fișierele din acest subdirector în locația corespunzătoare, astfel încât GNU CC să le poată găsi și să le poată conecta. Mai jos este un exemplu de copiere a unui număr de biblioteci de la mașina țintă:

Setul exact de biblioteci de care aveți nevoie și locațiile acestora pe mașina țintă sunt foarte dependente de sistemul de operare.

Multe mașini țintă necesită "fișiere de pornire" de tipul "crt0.o" și "crtn.o", care sunt legate de fiecare fișier executabil; acestea trebuie de asemenea plasate în "/ usr / local / target / lib". Pot exista mai multe opțiuni pentru "crt0.o", pentru a fi utilizate cu un profil sau alte opțiuni de compilare. Următoarea este un exemplu de copiere a acestor fișiere de pe mașina țintă:

Construcția reală a compilatorului de cruce

Acum puteți continua ca și când ați construit un compilator pentru o mașină prin construirea etapei 1. Dacă ați furnizat vreo opțiune "libgcc1.a". atunci compilația va fi întreruptă la punctul în care este necesar acest fișier,

înseamnă același pentru compilații nativi și compilați. Acesta este locul în care GNU CC stochează fișierele antet personale și, de asemenea, unde GNU CC stochează fișiere cu antet fix. Cross-Compilarea GNU CC rulează fixincludes peste fișierele header din '$ (tooldir) / include'. (În cazul în care fișierele antet Cross Compilația ar trebui să fie fixe, acestea ar trebui să fie setat la construirea CC GNU. Dacă fișierele header Cross Compilation sunt disponibile pentru ANSI C și GNU CC, nimic special pentru a face.)

înseamnă același pentru compilații nativi și compilați. Acesta este locul unde g-ul arată mai întâi, în căutarea fișierelor antet. libg ++ instalează numai fișierele de antet independente de mașină din acest director.

Este folosit numai pentru compilatorul nativ. De obicei, aceasta este '/ usr / local / include'. GNU CC scanează acest director, astfel încât utilizatorii pot seta fișierele antet la '/ usr / local / include'.

Este folosit numai pentru crosscompiler. GNU CC nu instalează nimic aici.







Trimiteți-le prietenilor: