it-swarm.it

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

Per quanto ho capito, sono biblioteche, ma qual è la differenza tra i due?

70
Erik B

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

55
ajk

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.)

29
Hack Saw