Hva er forskjellen mellom .a og .so fil?

Så vidt jeg forstår er de biblioteker, men hva er forskjellen mellom de to?

Kommentarer

Svar

A .a filen er et statisk bibliotek, mens en .so -fil er et delt objekt (dynamisk) bibliotek som ligner på en DLL på Windows. Det er detaljert informasjon om forskjellene mellom de to på denne siden .

Kommentarer

  • .a kan bare inkluderes som en del av et program under kompilering. .so ' s kan " importeres " mens et program lastes inn.
  • hva står .a for?
  • @hfrmobile A står for arkiv – et statisk bibliotek er en samling av objektfiler opprettet ved hjelp av ar verktøyet. Mer info her

Svar

Som en følge er en .a-fil et «ar» -arkiv. Ikke ulikt et tar-arkiv, den lagrer .o eller objekt filer, slik at de kan trekkes ut av arkivet og kobles til et program, blant annet. Du kan bruke ar til å lagre andre filer hvis du vil. / p>

Du kan få en oversikt over medlemmene i en ar-fil med parameteren -t, for eksempel:

ar -t /usr/lib/libc.a 

En .so-fil er en «delt objekt» -fil, og har mye mer informasjon tilgjengelig for linkeren, slik at medlemmer kan kobles til et lasteprogram så raskt som mulig.

Prøv for eksempel:

objdump -T /lib/libc-2.11.1.so 

(eller hvilken versjon av libc.so du har i / lib-katalogen din.) Vær oppmerksom på at en .so-fil også kan inneholde et koblingsskript som styrer den for å finne fil andre steder, eller bruk noe annet.

Interessant, en .so-fil kan også være et fullverdig program. For eksempel å prøve å kjøre /lib/libc.so.6 . (Dessverre ser ikke denne siste delen ut til å fungere på mer moderne systemer. Ikke at det er et stort tap.)

Kommentarer

  • Skrivfeil . du mener å skrive ar -t /usr/lib/libc.a. Egentlig synes - ikke ' t å være nødvendig i dette tilfellet. Også /lib/libc.so.6. skriver bare ut noe. Jeg vet ikke ' om jeg vil kalle det en full fledged program.
  • Det ' et fullverdig program i den forstand at det har et hovedsymbol for exec å finne.
  • Du kan også kjøre ldd på .so ' s, og det vil vise deg hvilke andre biblioteker den bruker. Statisk kommer tilbake med en melding om at den ' ikke er et dynamisk bibliotek.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *