Grunnleggende Om Linux: Statiske Biblioteker vs Dynamiske Biblioteker

Erika Caoili

Følg

Des 17, 2019 * 4 min lese

Foto Av Edwin Andrade På Unsplash

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 biblioteker har en»*. så «navnekonvensjon og statiske biblioteker har en»*.en».

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

  1. den trenger bare en kopi under kjøring. Det er avhengig av søknaden og biblioteket er tett tilgjengelig for hverandre.
  2. Flere kjørende programmer bruker samme bibliotek uten at hver fil har sin egen kopi.
  3. 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.
  4. de holder mindre filer.
  5. 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

  1. Statiske biblioteker motstår sårbarhet fordi Den lever i den kjørbare filen.
  2. 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.
  3. Endringer i filene og programmet krever at du kobler til og kompilerer på nytt.
  4. 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 for archive og brukes til å opprette det statiske biblioteket. Alle filene som slutter på ".o" vil bli lagt til liball.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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.