Exemplu de proiect de mai multe fișiere, bibliotecă linukstsentra http

Exemplu de proiect de mai multe fișiere

Acum scrie un program alcătuit din două fișiere sursă și un antet. Pentru a face acest lucru, vom lua calculatorul nostru și refaceți-l. Acum, după introducerea primei acțiuni ar trebui să fie introdusă la o dată. Dacă acțiunea funcționează numai cu un singur număr (la fel ca în cazul sinus, cosinus, tangenta, rădăcină pătrată), rezultatul este afișat imediat. Dacă aveți nevoie de un al doilea număr, acesta este solicitat în mod expres.

Crearea unui kalkul2 director de proiect. În ea va crea trei fișiere: calculate.h, calculate.c, main.c.

float Se calculează (float numerație, char Operation [4]);

float Se calculează (float numerație, char Operation [4])

if (strncmp (Operation, "+", 1) == 0)

printf ( "al doilea termen.");

else if (strncmp (Operațiunea, "-", 1) == 0)

printf ( "scade.");

else if (strncmp (Operațiunea, "*", 1) == 0)

printf ( "Multiplicatorul.");

else if (strncmp (Funcționare, "/", 1) == 0)

printf ( "divizor.");

printf ( "Divizarea eroare de zero.".);

else if (strncmp (Operațiunea, "poc", 3) == 0)

printf ( "Gradul".);

else if (strncmp (Operațiunea, "sqrt", 4) == 0)

else if (strncmp (Operațiunea, "păcat", 3) == 0)

else if (strncmp (Operation, "cos", 3) == 0)

else if (strncmp (Operațiunea, "tan", 3) == 0)

Avem două dintre codul sursă (c-fișiere) și un fișier antet (h-fișier). Antetul este inclus atât în ​​c-fișier.

gcc -c calculate.c

Am primit calculate.o. Apoi main.c.

Și el main.o în fața noastră! Acum, după cum probabil deja intuitiv, aveți aceste două fișiere obiect face de start.

gcc calculate.o main.o o- kalkul

Hopa. și nu a reușit. În schimb, ca fișierul executabil dorit, în consola nu a fost nici un abuz:

calculate.o (.text + 0x1b5): In functie `Calculate„:

calculate.c: nedefinit de referință la `poc '

calculate.o (.text + 0x21e): calculate.c: nedefinit referire la `sqrt '

calculate.o (.text + 0x274): calculate.c: nedefinit referință la `păcat '

calculate.o (.text + 0x2c4): calculate.c: nedefinit referire la `cos'

calculate.o (.text + 0x311): calculate.c: nedefinit de referință la `tan '

collect2: ld returnat 1 iesire de stare

Să vedem ce ne-am certat atât. referință nedefinită înseamnă o trimitere la o funcție care nu este definită. În acest caz, nu a fost găsit gcc determinarea funcțiilor ște, sqrt, sin, cos, tan. Unde le găsiți?

Când am scris programul de salut, vom folosi funcția printf șir de text de ieșire. Cu toate acestea, după cum vă amintiți, nu am fost contactat pentru definirea acestei funcții. Unde ți-a numit pe atunci?

Doar atunci când leagă orice program de compilator implicit GCC include executabil libc bibliotecă de fișiere. Aceasta este o biblioteca standard C. Acesta conține o funcții de rutină necesare în absolut toate programele scrise în C, inclusiv funcția printf. Deoarece biblioteca libc avea nevoie în toate programele, este activată în mod implicit, fără a fi nevoie de a da o indicație separată a includerii sale.

Restul bibliotecii ar trebui să fie incluse pentru a solicita în mod explicit. Nu se poate în toate programele pentru a pune toate bibliotecile. Apoi, un executabil se va umfla până la dimensiuni mari, de neconceput. Un program are nevoie de anumite funcții, celălalt - cealaltă. De ce ei bloca cod inutile! Să presupunem că există doar ceea ce este cu adevărat necesar.

Suntem în acest caz, au nevoie de o libm bibliotecă. Aceasta conține toate funcțiile matematice de bază. Se impune includerea în textul fișierului antet de program .

În plus, distribuțiile Linux includ alte biblioteci, de exemplu:

ieșire libGL grafică tridimensională în standardul OpenGL. antet necesară .

libcrypt funcții criptografice. antet necesară .

libcurses Pseudographic în modul de caractere. antet necesară .

libform Creați formulare de ecran în modul text. antet necesară .

libgthread multithreading de sprijin. antet necesară .

bibliotecă grafică libgtk în modul X Window. antet necesară .

libhistory lucrează cu reviste. antet necesară .

libjpeg de lucru cu imagini JPEG. antet necesară .

libncurses Lucrul cu pseudographics în modul de caractere. antet necesară .

libpng Lucrul cu elemente grafice în format PNG. antet necesară .

libpthread biblioteca POSIX multifir. Standard multi-threaded de bibliotecă pentru Linux. antet necesară .

libreadline de lucru cu linia de comandă. antet necesară .

libtiff Lucrul cu elemente grafice în format TIFF. antet necesară .

libvga de lucru de nivel scăzut cu VGA și SVGA. antet necesară .

Precum și multe altele.

Vă rugăm să rețineți că numele tuturor acestor biblioteci încep cu combinații de litere lib-. Pentru includerea lor explicită în fișierul executabil, trebuie să adăugați la opțiunea echipa gcc -l, la care se adaugă împreună numele bibliotecii fără lib-. De exemplu, pentru a include o bibliotecă libvga trebuie să specificați opțiunea -lvga.

Avem nevoie de funcția matematică poc, sqrt, sin, cos, tan. Ele sunt, după cum sa spus, sunt în libm biblioteca matematică. Prin urmare, pentru a se conecta la această bibliotecă, trebuie să specificați opțiunea -lm.

gcc calculate.o main.o o- kalkul -lm

Ura! În cele din urmă, fișierul executabil nostru este creat!

articole similare