Cosa contiene una libreria statica compilata GCC?
-
05-07-2019 - |
Domanda
La mia applicazione si collega a libsamplerate.a. Lo sto facendo per facilitare la distribuzione del file binario finale.
Sono preoccupato che forse il codice all'interno del file .a dipende da alcune altre librerie che dovrò distribuire.
Ma se non lo sono, sono preoccupato di gonfiare troppo la mia domanda includendo più copie di es. libc.
Cosa sarà esattamente all'interno di libsamplerate.a? Solo il bytecode di libsamperate? O di più?
Soluzione
Una libreria statica è solo una raccolta di file oggetto. Quando si compila un programma su una libreria statica, il codice oggetto per le funzioni utilizzate dal programma viene copiato dalla libreria nell'eseguibile. Il collegamento a una libreria statica non comporta l'inclusione nel codice di alcuna funzione esterna a tale libreria.
Altri suggerimenti
Un file .a è fondamentalmente solo un insieme di file .o. Puoi dimostrarlo usando lo strumento ar
.
Ad esempio, per visualizzare i contenuti della tua libreria:
ar -t libsamplerate.a
Per creare un file .a da zero:
ar -r tim.a *.txt
Solo il codice oggetto per libsamplerate. Il collegamento statico a una singola libreria non rende staticamente collegate tutte le librerie; sarebbe male.