Hvad er forskellen mellem .a og .so-filer?

Så vidt jeg forstår, er de biblioteker, men hvad er forskellen mellem de to?

Kommentarer

Svar

A .a filen er et statisk bibliotek, mens en .so -fil er et delt objekt (dynamisk) bibliotek, der ligner en DLL på Windows. Der er nogle detaljerede oplysninger om forskellene mellem de to på denne side .

Kommentarer

  • .a kan kun medtages som en del af et program under kompilering. .so ' s kan " importeres " mens et program indlæses.
  • hvad står .a for?
  • @hfrmobile A står for arkiv – et statisk bibliotek er en samling af objektfiler oprettet ved hjælp af ar hjælpeprogrammet. Flere oplysninger her

Svar

Som en opfølgning er en .a-fil et “ar” arkiv. Ikke i modsætning til et tar arkiv, den gemmer .o eller objekt filer, så de blandt andet kan trækkes ud af arkivet og linkes til et program. Du kan bruge ar til at gemme andre filer, hvis du vil. / p>

Du kan få en liste over medlemmerne af en ar-fil med parameteren -t, for eksempel:

ar -t /usr/lib/libc.a 

En .so-fil er en “delt objekt” -fil og har meget mere information tilgængelig for linkeren, så medlemmer kan linkes til et indlæsningsprogram så hurtigt som muligt.

Prøv for eksempel:

objdump -T /lib/libc-2.11.1.so 

(eller hvilken som helst version af libc.so du har i din / lib-mappe.) Bemærk, at en .so-fil også bare kunne indeholde et linkerscript, der styrer den for at finde fil andetsteds eller brug noget andet.

Interessant nok kan en .so-fil også være et fuldt udbygget program. For eksempel at prøve at køre /lib/libc.so.6 . (Desværre ser denne sidste del ikke ud til at fungere på mere moderne systemer. Ikke at det er et stort tab.)

Kommentarer

  • Typo . du mener at skrive ar -t /usr/lib/libc.a. Faktisk synes - ikke ' t at være nødvendigt i dette tilfælde. Også /lib/libc.so.6. udskriver bare noget output. Jeg ved ikke ' om jeg vil kalde det en full fledged program.
  • Det ' et fuldt udbygget program i den forstand, at det har et hovedsymbol, som exec kan finde.
  • Du kan også køre ldd på .so ' s, og det viser dig, hvilke andre biblioteker det bruger. Statisk vender tilbage med en besked, der siger, at den ' ikke er et dynamisk bibliotek.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *