paulo1205
(usa Ubuntu)
Enviado em 12/07/2017 - 19:05h
ar normalmente se usa quando você vai juntar vários objetos (sufixo
.o) no mesmo arquivo, por comodidade de os distribuir num arquivo só, em vez de montes de arquivos separados. Um arquivo
.a é análogo a um
.tar, com a característica adicional que o linker (
ld) e outras ferramentas de geração e exame de código objeto (como
ranlib,
nm,
objdump etc.) sabem obter acesso a objetos agregados dentro do
.a.
Essa combinação de objetos dentro de um só arquivo em disco é útil para o usuário da biblioteca e para seu desenvolvedor. Imagine, por exemplo, a
libc.a. Ela agrega funções bem distintas entre si, como, por exemplo,
scanf() e
getaddrinfo(). É óbvio que a implementação dessas duas funções, tão distintas entre si, não residem no mesmo arquivo fonte. Nem residem no mesmo arquivo objeto (dentro da minha
libc.a,
scanf() residem em
scanf.o e
getaddrinfo(), em
getaddrinfo.o). Para quem usa a biblioteca, é vantajoso não ter de referenciar uma quantidade absurda de arquivos
.o diferentes na hora de chamar o linker (até porque a ordem em que esses arquivos são chamados também é relevante!). Para quem desenvolve a biblioteca, também é útil, pois, caso haja alguma manutenção a ser feita na biblioteca, pode-se mexer e recompilar apenas as partes relevantes, com uma quantidade pequena de código, o que pode gerar uma considerável economia de tempo.
Dependendo do que se queira fazer, pode ser necessário usar
ranlib. E se se quiser distribuir uma biblioteca dinâmica, devem-se usar flags de compilação específicos, como
-fpic (ou
-fPIC, eu nunca lembro quando é um ou outro) e
-shared.