Hva er et bibliotek I Linux?
Hvorfor bruker vi biblioteker?
hvordan lage et statisk og dynamisk bibliotek?
hvordan og hvorfor bruker vi dem?
Et Bibliotek I Linux
et bibliotek er en samling av forhåndskompilerte kodebiter kalt funksjoner. Biblioteket inneholder felles funksjoner og sammen danner de en pakke kalt-et bibliotek. Funksjoner er blokker med kode som blir gjenbrukt gjennom hele programmet. Bruk av kodebitene igjen i et program sparer tid. Det holder programmereren fra å skrive om koden flere ganger. For programmerere gir biblioteker gjenbrukbare funksjoner, datastrukturer, klasser og så videre.
«For eksempel, hvis du bygger et program som trenger å utføre matematiske operasjoner, trenger du ikke å opprette en ny matematikkfunksjon for det, du kan bare bruke eksisterende funksjoner i biblioteker for det programmeringsspråket.»(«Forstå Delte Biblioteker I Linux»)
et bibliotek er ikke kjørbart, og det er en viktig forskjell fra prosesser og applikasjoner. Biblioteker spiller sin rolle på kjøretid eller kompileringstid. I programmeringsspråket c har vi to typer biblioteker: dynamiske biblioteker og statiske biblioteker.
Biblioteker har objektfiler opprettet av "-c" gcc flag
og slutter i ".o"
etter konvensjonen. De er resultatet av kompilatorens utgang og inneholder funksjonsdefinisjoner i binær form.
Forskjeller Mellom Dynamiske Og Statiske Biblioteker
Dynamiske eller delte biblioteker forekommer som separate filer utenfor de kjørbare filene. Dermed trenger den bare en kopi av bibliotekets filer under kjøring. Ved kompileringstid forblir statiske biblioteker låst inn i et program. Den inneholder filens programmer som holder en kopi av bibliotekets filer på kompileringstid.
når du bruker et dynamisk bibliotek, refererer programmereren til biblioteket når det må kjøres. For eksempel, for å få tilgang til strenglengdefunksjonen fra
Fordeler Og Ulemper Ved Dynamiske Biblioteker
- den trenger bare en kopi under kjøring. Det er avhengig av søknaden og biblioteket er tett tilgjengelig for hverandre.
- Flere kjørende programmer bruker samme bibliotek uten at hver fil har sin egen kopi.
- men hva om det dynamiske biblioteket blir skadet? Den kjørbare filen kan ikke fungere fordi den lever utenfor den kjørbare og er sårbar for å bryte.
- de holder mindre filer.
- Dynamiske biblioteker er koblet til kjøretid. Det krever ikke rekompilering og relinking når programmereren gjør en endring.
ved kompileringstid bruker applikasjoner statiske biblioteker. Alle kopier av funksjonene blir plassert i programfilen fordi de trengs for å kjøre prosessen.
Fordeler Og Ulemper Ved Statiske Biblioteker
- Statiske biblioteker motstår sårbarhet fordi Den lever i den kjørbare filen.
- hastigheten ved kjøring skjer raskere fordi objektkoden (binær) er i den kjørbare filen. Dermed blir anrop til funksjonene utført raskere. Husk at det dynamiske biblioteket lever utenfor kjørbar, så samtaler vil bli gjort fra utsiden av kjørbar.
- Endringer i filene og programmet krever at du kobler til og kompilerer på nytt.
- Filstørrelsen er mye større.
Hvordan skape et dynamisk og statisk bibliotek?
for begge bibliotekene bør programmet inneholde en prototype
for hver av funksjonene som finnes i biblioteket. Hvis du bruker en header-fil, ikke glem å inkludere header filename
.
#include "<header file name>"
Dynamiske Biblioteker
skriv følgende kommando for å opprette et dynamisk bibliotek:
gcc -g -fPIC -Wall -Werror -Wextra -pedantic *.c -shared -o liball.so
Med "*.c"
— det tar Alle c kildefilene i gjeldende katalog og gjør et delt bibliotek kalt "liball.so."
flagget -fPIC
kan følgende kode refereres til hvilken som helst virtuell adresse under kjøring. Det står For Posisjon Uavhengig Kode.Biblioteket holder ikke data på faste adresser fordi plasseringen i minnet vil skifte mellom programmer. Objektfiler blir kompilert ved hjelp av -shared flag
. compiler
vil senere identifisere et bibliotek ved å søke etter filer som begynner med "lib"
og slutter med navnekonvensjonen, .so
programmet trenger banen for å lete etter bibliotekets filer. Så må du skrive inn følgende kommando for å legge til den plasseringen til miljøvariabelen kalt LD_LIBRARY_PATH.
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
når du bruker det dynamiske biblioteket, skriver du inn følgende kommando:
gcc -g -wall -o app app.c liball.so
Statiske Biblioteker
for å lage et statisk bibliotek må vi bruke følgende kommando:
ar rc liball.a dog.o cat.o bird.o
"ar"
står forarchive
og brukes til å opprette det statiske biblioteket. Alle filene som slutter på".o"
vil bli lagt tilliball.a library
og de er objektfilene i dette tilfellet.
-rc flag
vil gjøre to ting: erstatt og opprett et nytt bibliotek hvis det ikke allerede finnes. Det neste trinnet er indeksering, for å gjøre det, skriver vi:
ranlib liball.a
når du bruker det statiske biblioteket, skriver du inn følgende kommando:
gcc main.c -L -l<filename>
-L flag
åpner linker
slik at bibliotekene kan bli funnet i den gitte katalogen. Det søker også etter andre steder der kompilatoren ser etter systembiblioteker.