Så vitt jag förstår är de bibliotek, men vad är skillnaden mellan de två?
Kommentarer
- Relaterat inlägg – Vad ' är skillnaden mellan .so, .la och .a bibliotek filer?
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 enfull 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.