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ù?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top