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!