2012-09-06 21 views
14

estoy tratando de compilar una biblioteca de 3 ª parte (en Linux) y ver que se está generando archivos libalgo.a tengo mis otras bibliotecas que son .so presentar¿Cuál es la diferencia entre los archivos .so y .a?

pero parece que aún .a es compartida biblioteca y se puede usar como un .so lib

Entonces, ¿hay alguna diferencia entre los dos? o son simplemente iguales con diferentes convenciones de nomenclatura.

+2

¿Qué te hace decir que se pueden usar de la misma manera? –

+0

@CarlNorum porque es posible vincular ambos tipos: solo el resultado será diferente. –

+0

@ H2CO3, esa es una definición bastante débil de 'se puede usar como', pero lo compraré, supongo ... –

Respuesta

17

Pero parece que incluso .a es compartida biblioteca

No, es una biblioteca estática.

y se puede utilizar como un .so lib

Si se refiere a vincular a ella, entonces sí. Pero no puede dlopen() un archivo .a que podría hacer con un archivo .so.

Siempre puede preguntar a nuestro viejo amigo Uncle G para responder a sus preguntas.

+0

Gracias. Aquí es donde me confundí. Mi problema no era vincularlos. ambos pueden estar vinculados. pero quería saber si .a se puede vincular dinámicamente o estáticamente solamente. está claro ahora – rajshenoy

+8

El enlace al "Tío G" está roto. – splungebob

18

Un archivo .a es una biblioteca estática, mientras que un archivo .so es una biblioteca dinámica objeto compartido similar a un DLL en Windows.

Una lata .a incluido como parte de un programa durante la compilación & .so puede importados, mientras que un programa se carga .

15

Cuando se vincula con el *.a, el código de la biblioteca se incluye en el archivo ejecutable y el archivo ejecutable se puede ejecutar sin que el archivo *.a esté presente. Cuando se vincula con el *.so, ese no es el caso y el archivo *.so debe estar presente en el tiempo de ejecución.

Cuestiones relacionadas