Cosa sono i file .a e .so?


Risposte:


484

Le librerie di archivio (.a) sono collegate staticamente, ad es. Quando si compila il programma con l'opzione -c in gcc. Quindi, se ci sono cambiamenti nella libreria, è necessario compilare e compilare nuovamente il codice.

Il vantaggio di .so (oggetto condiviso) rispetto alla libreria .a è che sono collegati durante il runtime, cioè dopo la creazione dell'opzione .o -o in gcc. Quindi, se c'è qualche cambiamento nel file .so, non è necessario ricompilare il programma principale. Ma assicurati che il tuo programma principale sia collegato al nuovo file .so con il comando ln.

Questo ti aiuterà a creare i file .so. http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

Spero che sia di aiuto.


2
qualcuno di questi si riferisce a pic(codice indipendente dalla posizione)?
Transang

213

.a sono librerie statiche. Se usi il codice memorizzato al loro interno, viene preso da loro e incorporato nel tuo binario. In Visual Studio, questi sarebbero file .lib.

.sono librerie dinamiche. Se usi il codice memorizzato al loro interno, non viene preso e incorporato nel tuo binario. Invece è appena referenziato, quindi il binario dipenderà da loro e il codice dal file so verrà aggiunto / caricato in fase di esecuzione. In Visual Studio / Windows si tratterebbe di file DLL (con piccoli file .lib contenenti informazioni di collegamento).


ciao c'è qualche opzione per decompilare il file .so nel codice c / c ++.?
Jishant,


Un piccolo .libfile per .dllsi chiama libreria di importazione.
Programmatore orientato al denaro,

13

I file .a sono di solito librerie che sono collegate staticamente (o più accuratamente archivi) e
.so sono librerie collegate dinamicamente.

Per fare una porta avrai bisogno del codice sorgente che è stato compilato per crearle o di file equivalenti sul tuo computer AIX.


Come posso creare la mia applicazione per utilizzare i file .so?
Dunc,

Esistono molti riferimenti eccellenti per la creazione di entrambi i tipi di librerie e il collegamento ad essi sul Web. Google è tuo amico.
David Pointer,

@Dunc - Ci sono un paio di modi. Hai un makefile? Di solito il comando che assembla l'intero programma (e quindi chiama il linker) specificherà i luoghi in cui cercare i file di libreria con -L / dir / dir1 /.../ e può anche nominare esplicitamente le librerie con -lname. Scoprirai che il nome effettivo è libname.a o libname.so. Il linker può quindi capire cosa fare se si tratta di un programma ragionevolmente normale. Ma hai ancora il problema di creare o trovare il file .so. Hai il codice sorgente per costruirlo o una libreria AIX?
bagliore

10

Sono utilizzati nella fase di collegamento. .ai file sono collegati staticamente e i .sofile sono in qualche modo collegati, quindi la libreria è necessaria ogni volta che si esegue l'exe.

Puoi trovare dove sono memorizzati guardando una qualsiasi delle directory lib ... /usr/libe ne /libhai la maggior parte, e c'è anche la LIBRARY_PATHvariabile d'ambiente.


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.