Risposte:
Un .a
file è una libreria statica, mentre un .so
file è 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 .
.a
può essere incluso solo come parte di un programma durante la compilazione. .so
'può essere "importato" durante il caricamento di un programma.
ar
utilità. Maggiori informazioni qui
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.)
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
.
ldd
su .so's, e ti mostrerà quali altre librerie usa. Statico tornerà con un messaggio che dice che non è una libreria dinamica.