quando UM programa C é compilado, o compilador gera código objeto. Depois de gerar o código objeto, o compilador também invoca linker. Uma das principais tarefas do linker é fazer código de funções de biblioteca (eg printf (), scanf (), sqrt (),..etc) disponível para o seu programa. Um linker pode realizar esta tarefa de duas maneiras, copiando o código da função da biblioteca para o seu código objeto, ou fazendo alguns arranjos para que o código completo das funções da biblioteca não seja copiado, mas disponibilizado em tempo de execução.,

Static Linking and Static Libraries is the result of the linker making copy of all used library functions to the executable file. A ligação estática cria ficheiros binários maiores e necessita de mais espaço no disco e na memória principal. Exemplos de bibliotecas estáticas (bibliotecas que estão estaticamente ligadas) são, .A files in Linux and .ficheiros lib no Windows.

Steps to create a static library Let us create and use a Static Library in UNIX or UNIX like OS.
1. Crie um ficheiro C que contenha funções na sua biblioteca.,div>

#include <stdio.h>
void fun(void)
{
printf("fun() called from a static library");
}



We have created only one file for simplicity., Também podemos criar vários arquivos na biblioteca.2. Criar um arquivo de cabeçalho para a biblioteca

void fun(void);



3. Compile os ficheiros da biblioteca.

 gcc -c lib_mylib.c -o lib_mylib.o 

4. Criar biblioteca estática., Este passo é agrupar vários arquivos de objetos em uma biblioteca estática (veja ar para mais detalhes). A saída deste passo é a biblioteca estática.

 ar rcs lib_mylib.a lib_mylib.o 

5. Agora nossa biblioteca estática está pronta para usar. Nesta altura, podíamos copiar a lib_mylib.um lugar para usá-lo. Para fins de demonstração, vamos manter a biblioteca no diretório atual.

deixe-nos criar um programa de driver que usa acima biblioteca estática criada.
1., Criar um ficheiro de C com a função principal

#include "lib_mylib.h"
void main()
{
fun();
}



2., Compile o programa driver.

gcc -c driver.c -o driver.o

3. Ligue o programa de driver compilado à biblioteca estática. Note que-L. é usado para dizer que a biblioteca estática está na pasta atual (Veja isso para detalhes das opções-L E-l).

gcc -o driver driver.o -L. -l_mylib

4. Execute o programa driver

./driver fun() called from a static library

a seguir estão alguns pontos importantes sobre bibliotecas estáticas.
1. Para uma biblioteca estática, o código real é extraído da Biblioteca pelo linker e usado para construir o executável final no ponto em que você compila/constrói sua aplicação.,

2. Cada processo recebe sua própria cópia do código e dos dados. Onde, como no caso de bibliotecas dinâmicas, é apenas compartilhado código, os dados são específicos para cada processo. Para bibliotecas estáticas, as pegadas de memória são maiores. Por exemplo, se todas as ferramentas do sistema de janelas estivessem estaticamente ligadas, várias dezenas de megabytes de RAM seriam desperdiçadas para um usuário típico, e o usuário seria retardado por um monte de paging.3. Uma vez que o código da Biblioteca é conectado no tempo de compilação, o executável final não tem dependências na biblioteca no tempo de execução., sem custos adicionais de carregamento em tempo de execução, isso significa que você não precisa levar ao longo de uma cópia da biblioteca que está sendo usada e você tem tudo sob seu controle e não há dependência.4. Em bibliotecas estáticas, uma vez que tudo é empacotado em sua aplicação, você não tem que se preocupar que o cliente terá a biblioteca certa (e versão) disponível em seu sistema.5. Uma desvantagem das bibliotecas estáticas é, para qualquer mudança(up-gradation) nas bibliotecas estáticas, você tem que recompilar o programa principal todas as vezes. 6., Uma grande vantagem de as bibliotecas estáticas serem preferidas mesmo agora”é a velocidade”. Não haverá perguntas dinâmicas de símbolos em bibliotecas estáticas. Muitos softwares de linha de produção usam bibliotecas estáticas ainda hoje.

Dynamic linking and Dynamic Libraries Dynamic Linking doesn’t require the code to be copied, it is done by just placing name of the library in the binary file. A ligação real acontece quando o programa é executado, quando tanto o arquivo binário e a biblioteca estão na memória. Exemplos de bibliotecas dinâmicas (bibliotecas que estão ligadas em tempo de execução) são, .assim em Linux e .dll nas janelas.,em breve estaremos cobrindo mais pontos em bibliotecas dinâmicas e passos para criá-las.este artigo é compilado por Abhijit Saha e revisado pela equipe GeeksforGeeks. Por favor, escreva comentários se encontrar alguma coisa incorreta, ou você quer compartilhar mais informações sobre o tópico discutido acima.Leitor de atenção! Não pares de aprender agora. Obtenha todos os importantes conceitos de teoria CS para entrevistas SDE com o curso de Teoria CS a um preço amigável para os estudantes e se tornar indústria pronta.Etiquetas de artigos:

marcas de prática:

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *