Projekt példa több fájl, könyvtár linukstsentra http

Projekt példa több fájl

Most írni egy programot, amely két forrás fájlokat és egy fejlécet. Ehhez vesszük számológép és újra azt. Most, miután a bevezetése az első lépéseket kell bevezetni egyszerre. Ha a kereset rendszerint csak egyetlen számot (például abban az esetben szinusz, koszinusz, tangens, négyzetgyök), az eredmény azonnal megjelenik. Ha szüksége van egy második számot, akkor kifejezetten kérik.

Projekt létrehozása címtár kalkul2. Az akkor létre három fájlt: calculate.h, calculate.c, main.c.

float Számítsuk (float Numeral, char Operation [4]);

float Számítsuk (float Numeral, char Operation [4])

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

printf ( "második kifejezés.");

else if (strncmp (Operation, "-", 1) == 0)

printf ( "kivonni.");

else if (strncmp (Operation, "*", 1) == 0)

printf ( "szorzó.");

else if (strncmp (Operation, "/", 1) == 0)

printf ( "elválasztó.");

printf ( "A hiba nullával osztani.");

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

printf ( "diploma".);

else if (strncmp (Operation "sqrt", 4) == 0)

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

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

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

Van két forráskód (c-fájlok) fájlt, és egy fejléc (h-fájl). A fejléc tartalmazza mind a c-fájlt.

gcc -c calculate.c

Kaptunk calculate.o. Aztán main.c.

És ő main.o előttünk! Most, akkor valószínűleg már ösztönösen, akkor ez a két objektum fájlok teszik kezdet.

gcc calculate.o main.o -o kalkul

Hoppá. és ez nem sikerült. Ehelyett, amint a kívánt futtatható fájl, a konzol nem volt semmilyen visszaélés:

calculate.o (.text + 0x1b5): A funkció `Számítsuk„:

calculate.c: undefined reference to `pow"

calculate.o (.text + 0x21e): calculate.c: undefined reference to `sqrt '

calculate.o (.text + 0x274): calculate.c: undefined reference to `sin"

calculate.o (.text + 0x2c4): calculate.c: undefined reference to cos'

calculate.o (.text + 0x311): calculate.c: undefined reference to `tan '

collect2: ld iránt 1 exit status

Lássuk, mit már oly korholta. Definiálatlan olyan utalás, hogy a funkció nincs definiálva. Ebben az esetben nem talált gcc meghatározó pow funkciók, gyök, sin, cos, tan. Hol találom meg őket?

Amikor írta a programot hello, mi használjuk a printf függvény kimeneti szöveg. Azonban, amint az eszébe jut, még nem kerestek meg az határozza meg ezt a funkciót. Hol ő akkor még?

Éppen akkor, amikor összekötő bármely fordító alapértelmezett gcc program tartalmazza futtatható fájl könyvtár libc. Ez egy standard könyvtár C. Ez tartalmaz egy rutin feladatokat szükséges feltétlenül az összes program C-ben írt, köztük a printf függvény. Mivel libc szükséges összes program, akkor alapértelmezés szerint engedélyezve van, anélkül, hogy adjanak egy külön jele annak felvételét.

A többi könyvtár kell venni, hogy szükség explicit módon. Nem lehet minden programban, hogy az összes könyvtárat. Aztán egy végrehajtható megduzzad akár nagy méretben elképzelhetetlen. A programnak szüksége van bizonyos funkciók, a másik - a másik. Miért tömíti felesleges kódot! Tegyük fel, hogy csak valóban szükséges.

Mi ebben az esetben szükség van egy könyvtár libm. Ez tartalmazza az összes alapvető matematikai műveletek. Ez szükségessé teszi a szövegben a program header file .

Ezen túlmenően, a Linux disztribúcióban megtalálható más könyvtárak, mint például:

libGL kimenet háromdimenziós grafika OpenGL szabvány. Kötelező fejléc .

libcrypt kriptográfiai funkciók. Kötelező fejléc .

libcurses Pseudographic karakteres üzemmódban. Kötelező fejléc .

libform létrehozása maszkok szöveges módban. Kötelező fejléc .

libgthread támogatás többszálú. Kötelező fejléc .

libgtk grafikus könyvtár X Window módban. Kötelező fejléc .

libhistory működik magazinok. Kötelező fejléc .

libjpeg munka JPEG képeket. Kötelező fejléc .

libncurses Munka pszeudografikus karakteres üzemmódban. Kötelező fejléc .

libpng Munka grafikákat PNG formátumban. Kötelező fejléc .

libpthread többszálú könyvtár POSIX. Normál többszálas könyvtár Linuxra. Kötelező fejléc .

libreadline munka a parancssorban. Kötelező fejléc .

libtiff Munka grafikákat TIFF formátumban. Kötelező fejléc .

libvga alacsony szintű munka VGA és SVGA. Kötelező fejléc .

Csakúgy, mint sokan mások.

Felhívjuk figyelmét, hogy a nevét minden ezen könyvtárak kezdődik betűkombinációk lib-. Mert az ő kifejezett felvételét a futtatható fájlt, akkor hozzá kell adni a csapat gcc -l opció, amihez hozzá együtt a könyvtár nevét nélkül lib-. Például, hogy egy könyvtár libvga meg kell adni a lehetőséget -lvga.

Meg kell matematikai függvény pow, gyök, sin, cos, tan. Ezek, mint már említettük, a matematikai könyvtár libm. Ezért, annak érdekében, hogy csatlakoztassa a könyvtár, meg kell adnunk a lehetőséget -lm.

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

Hurrá! Végül, a futtatható fájl jön létre!

Kapcsolódó cikkek