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

Per quanto ho capito si tratta di librerie, ma qual è la differenza tra le due?

Commenti

Risposta

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

Commenti

  • .a possono essere inclusi solo come parte di un programma durante la compilazione. .so ' possono essere " importati " durante il caricamento di un programma.
  • cosa significa .a?
  • @hfrmobile La a sta per archivio – una libreria statica è una raccolta di file oggetto creati utilizzando lutilità ar. Ulteriori informazioni qui

Risposta

Come seguito, un file .a è un archivio “ar”. Non diversamente da un archivio tar, memorizza .o o un oggetto file, consentendo loro di essere estratti dallarchivio e collegati in un programma, tra le altre cose. Puoi usare ar per archiviare altri file se lo desideri.

Puoi 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 altra versione di libc.so presente nella directory / lib.) Nota che un file .so potrebbe contenere anche uno script di linker che lo indichi a trovare il altrove, o usa qualcosaltro.

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

Commenti

  • Errore di battitura . intendi scrivere ar -t /usr/lib/libc.a. In realtà - ' non sembra essere necessario in questo caso. Inoltre /lib/libc.so.6. stampa solo un output. Non ' non so se lo chiamerei full fledged program.
  • ' un programma completo, nel senso che ha un simbolo principale da trovare per exec.
  • Puoi anche eseguire ldd su .so ' s e ti mostrerà quali altre librerie utilizza. Static tornerà con un messaggio che dice che ' non è una libreria dinamica.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *