Millised on erinevused staatiliste ja dünaamiliste raamatukogude vahel?

C-teek on nimetatud funktsioonide komplekt / rühm, näiteks tasuta (), malloc () või printf (). Kavandatud kasutamiseks muude programmide jaoks.

Need funktsioonid või muutujad jaotatakse seotud rühmadesse, mida nimetatakse päisefailiks. Ja teek on nende päisefailide kogu.

Miks kasutada raamatukogusid?

Teekide ja päiste failid on juurdepääsu hõlbustamiseks loodud. Võtame selle mõistmiseks näite.

Oma kõvakettale loome palju kaustu. Hoiame sama tüüpi seotud andmeid ühes kaustas. Iga kaust sisaldab sama tüüpi andmeid. Kui hoiame igat tüüpi andmeid ainult ühes kaustas, on neile raske juurde pääseda. Juurdepääsu lihtsustamiseks rühmitame seotud andmed ühte kausta.

Sama on päisefailide poliitikaga. Kõik seotud muutujad ja funktsioonid on selles rühmitatud, nagu kausta sama tüüpi andmed. Ja need päisefailid paigutatakse ühiselt raamatukokku.

Funktsioonide tüübid

Funktsioonide tüübid

Enne kui miski lubab vaadata funktsiooni klassifikatsiooni; Funktsioone saab jagada kahte kategooriasse

  • Raamatukogu funktsioonid või standardfunktsioonid.
  • Kasutaja määratletud funktsioon.
Teekifunktsioonid on kompilaatoris etteantud funktsioon ja mõned nende näited on printf () ja scanf (). C-programmeerimisel paigutage kasutaja päisefailid programmi algusesse, et kasutada vastavat teegi funktsiooni. Üldiselt on kõik samalaadsed raamatukogufunktsioonid rühmitatud ühe päisefaili alla - see tähendab raamatukogu funktsioone, näiteks pow (), sin () jne. Kõiki neid kasutatakse matemaatilise toimingu tegemiseks, mis on määratletud ainult päisefailis math.h. Kasutaja määratletud funktsiooni kirjutab kasutaja programmi kirjutamise ajal. Kõiki teegi ja kasutaja määratletud funktsioone saab kutsuda funktsioonist main ().

Allikas: https://electricalworkbook.com/c-functions/

Kuidas nad töötavad?

Raamatukogu funktsioonid on C funktsioonid, mis on kompileeritud ja pakutud koos teiste objektidega, mis on rühmitatud ja paigutatud ühisesse kohta, mida nimetatakse raamatukoguks.

C-i iga raamatukogufunktsioon täidab konkreetset toimingut. Neid teegi funktsioone saame kasutada eelmääratletud väljundi saamiseks, selle asemel, et kirjutada oma väljundite saamiseks oma kood.

Millised on erinevused staatiliste ja dünaamiliste raamatukogude vahel?

Raamatukogud on erineva maitsega: staatilised ja dünaamilised.

Dünaamilised teegid ei nõua koodi kopeerimist, vaid selleks tuleb lihtsalt panna teegi nimi binaarfaili. Tegelik linkimine toimub programmi käivitamisel, kui mälus on nii binaarfail kui ka teek. Dünaamiliste teekide näited (teegid, mis on lingitud töö ajal) on .so Linuxis ja .dll Windowsis.

Erinevalt dünaamilisest sisaldavad staatilised teegid objektifaili koodi teegist sihtmärgi binaarsesse. Selle tulemuseks on ketta suurem suurus ja käivitamisaegade lühenemine. Kuna teegi kood lisatakse otse lingitud sihtmärgi kahendkoodile, tähendab see, et kogu teegis oleva koodi värskendamiseks tuleks ka lingitud sihtmärk uuesti üles ehitada.

Kuidas neid luua?

-Looge staatiline raamatukogu:

1- Looge põhifunktsiooniga C-fail:

/ * failinimi: driver.c * /
# sisaldab "lib_mylib.h"
tühine pea ()
{
lõbus ();
}

2- Koostage draiveriprogramm:

gcc -c driver.c -o driver.o

3. Lingi kompileeritud draiveriprogramm staatilise teegiga. Pange tähele, et -L. kasutatakse teada andmiseks, et staatiline teek on aktiivses kaustas (lisateavet valikute -L ja -l kohta leiate siit):

gcc -o juht driver.o -L. -l_mylib

4. Käivitage draiveriprogramm:

./driver
fun () kutsutakse staatilisest raamatukogust

see on kõik.

-Looge dünaamiline raamatukogu.

Kaheetapilises protsessis.

  1. Looge objekti kood
  2. Loo raamatukogu

võimaldab kompileerida kogu meie lähtekoodi vastuväideteks.

gcc -Wall -fPIC -c * .c

vaatame selle valiku, mida nimetatakse -fPIC, tähendust:

-fPIC
Kui see on sihtmasina jaoks toetatud, väljastage asukohast sõltumatu kood, mis sobib dünaamiliseks linkimiseks ja väldib globaalse nihete tabeli suuruse piiramist. See valik muudab AArch64, m68k, PowerPC ja SPARC.
Positsioonist sõltumatu kood nõuab spetsiaalset tuge ja töötab seetõttu ainult teatud masinatel.
Kui see lipp on seatud, määratletakse makrode __pic__ ja __PIC__ väärtused 2.

Allikas: https://gcc.gnu.org/onlineocs/gcc/Code-Gen-Options.html#Code-Gen-Options

Teisisõnu tähendab, et loodud masinkood ei sõltu töötamiseks konkreetsest aadressist.

Nüüd peame selle objekti faili tegelikult jagatud teegiks muutma.

gcc-jagatud -o libexample.so * .o

Siin võetakse kõik objekti failid ja sisestatakse teeki.

Seal saate failide vahel .so faili vahetada meie ühiskasutuses oleva või dünaamilise teegi vahel.

Kuidas neid kasutada?

Esiteks, kui leiate mõne vajaliku funktsiooni, mis tuleb koodis rakendada, peate selle kutsuma koodi esimeses osas.

#include <”Raamatukogu nimi”>

Seega peate kõigi failide, mida soovite helistada või oma koodi kasutada, päisefailide lisamiseks nuppu #include.

Pärast seda, kui te oma koodi kompileerite, saab ta täpselt teada, kus on see funktsioon, mille peate kuulutama.

Millised on nende eelised ja puudused?

Staatilise raamatukogu jaoks:

1. Staatilistes raamatukogudes, kui kõik on teie rakendusse komplekteeritud, ei pea te muretsema, et kliendil on tema süsteemis saadaval õige raamatukogu (ja versioon).

2. Üks staatiliste raamatukogude eeliseid ka praegu on kiirus. Staatilistes raamatukogudes sümbolite dünaamilisi päringuid ei toimu. Paljud tootmisliini tarkvara kasutavad staatilisi raamatukogusid ka tänapäeval.

3. Staatiliste raamatukogude üks puudus on see, et staatiliste raamatukogude muudatuste korral peate põhiprogrammi iga kord uuesti kompileerima.

Dünaamilise raamatukogu jaoks:

  1. Saate oma programmide mahtu vähendada dünaamilise linkimise abil. Jagatud raamatukogude idee on omada ainult ühte eksemplari tavaliselt kasutatavaid rutiine ja säilitada seda ühist eksemplari ainulaadses jagatud raamatukogu segmendis. Need tavalised rutiinid võivad täidetavate programmide mahtu märkimisväärselt vähendada, säästes sellega kettaruumi.
  2. Laadimisaeg võib lüheneda, kuna jagatud teegi kood võib juba mälus olla.
  3. Miinused: dünaamiliselt lingitud programmid sõltuvad ühilduva teegi olemasolust. Kui teeki muudetakse (näiteks võib uus kompilaatori väljaanne raamatukogu muuta), võib-olla tuleb rakendused ümber teha, et need teegi uue versiooniga ühilduvaks muuta. Kui teegi süsteemist eemaldatakse, ei tööta seda teeki kasutavad programmid enam.