2008-10-31 16 views
7

Mi aplicación vincula contra libsamplerate.a. Estoy haciendo esto para facilitar la distribución del binario final.¿Qué contiene una biblioteca estática compilada por GCC?

Me preocupa que quizás el código dentro del archivo .a dependa de algunas otras bibliotecas que también necesitaré distribuir.

Pero si no es así, me preocupa que estoy hinchando demasiado mi aplicación al incluir varias copias de, por ejemplo. libc.

¿Qué será exactamente dentro de libsamplerate.a? ¿Solo el bytecode de libsamperate? ¿O más?

Respuesta

5

Una biblioteca estática es sólo una colección de archivos de objetos. Cuando compila un programa contra una biblioteca estática, el código de objeto para las funciones utilizadas por su programa se copia de la biblioteca a su ejecutable. Vincularse a una biblioteca estática no provocará que se incluyan en su código funciones fuera de esa biblioteca.

1

Solo el código objeto para libsamplerate. El enlace estático contra una única biblioteca no hace que todas las bibliotecas estén vinculadas estáticamente; eso sería malo.

6

Un archivo .a es básicamente un conjunto de archivos .o. Puede demostrar esto usando la herramienta ar.

Por ejemplo, para mostrar el contenido de su biblioteca:

ar -t libsamplerate.a 

Para crear un archivo .a partir de cero:

ar -r tim.a *.txt 
Cuestiones relacionadas