Vad är skillnaden mellan .a- och .so-filer?

Så vitt jag förstår är de bibliotek, men vad är skillnaden mellan de två?

Kommentarer

Svar

A .a filen är ett statiskt bibliotek, medan en .so -fil är ett delat objekt (dynamiskt) bibliotek som liknar en DLL i Windows. Det finns detaljerad information om skillnaderna mellan de två på denna sida .

Kommentarer

  • .a kan bara inkluderas som en del av ett program under kompilering. .so ' s kan " importeras " medan ett program laddas.
  • vad står .a för?
  • @hfrmobile A står för arkiv – ett statiskt bibliotek är en samling objektfiler som skapats med hjälp av verktyget ar. Mer information här

Svar

Som en följd är en .a-fil ett ”ar” -arkiv. Inte till skillnad från ett tjaraarkiv, den lagrar .o eller objekt filer, så att de kan dras ut ur arkivet och länkas till ett program, bland annat. Du kan använda ar för att lagra andra filer om du vill. / p>

Du kan få en lista över medlemmarna i en ar-fil med parametern -t, till exempel:

ar -t /usr/lib/libc.a 

En .so-fil är en ”delat objekt” -fil och har mycket mer information tillgänglig för länkaren så att medlemmar kan länkas till ett laddningsprogram så snabbt som möjligt.

Till exempel, försök:

objdump -T /lib/libc-2.11.1.so 

(eller vilken version av libc.so du har i din / lib-katalog.) Observera att en .so-fil också kan innehålla ett länkskript som styr den för att hitta fil någon annanstans, eller använd något annat.

Intressant kan en .so-fil också vara ett fullfjädrat program. Försök till exempel att köra /lib/libc.so.6 . (Tyvärr verkar den här sista delen inte fungera på modernare system. Inte för att den är en stor förlust.)

Kommentarer

  • Skrivfel . du menar att skriva ar -t /usr/lib/libc.a. Egentligen verkar - inte ' t vara nödvändigt i det här fallet. Även /lib/libc.so.6. skriver bara ut en del utdata. Jag vet inte ' om jag skulle kalla det en full fledged program.
  • Det ' ett fullfjädrat program i den meningen att det har en huvudsymbol för exec att hitta.
  • Du kan också köra ldd på .so ' s, och det visar vilka andra bibliotek det använder. Statisk kommer tillbaka med ett meddelande som säger att det ' inte är ett dynamiskt bibliotek.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *