Qual è la differenza tra i file .a e .so?


Risposte:


54

Un .afile è una libreria statica, mentre un .sofile è una libreria di oggetti condivisi (dinamica) simile a una DLL su Windows. Ci sono alcune informazioni dettagliate sulle differenze tra i due in questa pagina .


18
.apuò essere incluso solo come parte di un programma durante la compilazione. .so'può essere "importato" durante il caricamento di un programma.
LawrenceC

2
cosa significa .a?
hfrmobile,

2
@hfrmobile a sta per archivio - una libreria statica è una raccolta di file oggetto creati usando l' arutilità. Maggiori informazioni qui
ajk

28

Come seguito, un file .a è un archivio "ar". Non diversamente da un archivio tar, memorizza i file .o o object, consentendo loro di essere estratti dall'archivio e collegato in un programma, tra le altre cose. È possibile utilizzare ar per memorizzare altri file se lo si desidera.

È possibile ottenere un elenco dei membri di un file ar con il parametro -t, ad esempio:

ar -t /usr/lib/libc.a

Un file .so è un file "oggetto condiviso" e ha molte più informazioni disponibili per il linker in modo che i membri possano essere collegati a un programma di caricamento il più rapidamente possibile.

Ad esempio, prova:

objdump -T /lib/libc-2.11.1.so

(o qualsiasi versione di libc.so disponibile nella directory / lib.) Notare che un file .so potrebbe contenere anche uno script linker che lo dirige per trovare il file altrove o usare qualcos'altro.

È interessante notare che un file .so può anche essere un programma completo. Ad esempio, provando a eseguire /lib/libc.so.6 . (Purtroppo, quest'ultima parte non sembra funzionare su sistemi più moderni. Non che sia una grande perdita.)


Errore di battitura. intendi scrivere ar -t /usr/lib/libc.a. In realtà il -non sembra essere necessario in questo caso. Inoltre /lib/libc.so.6.stampa solo qualche output. Non so se lo chiamerei a full fledged program.
Faheem Mitha,

1
È un programma a tutti gli effetti, nel senso che ha un simbolo principale da trovare per exec.
Hack Saw

2
Puoi anche eseguire lddsu .so's, e ti mostrerà quali altre librerie usa. Statico tornerà con un messaggio che dice che non è una libreria dinamica.
Marcin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.