Linux Básico: Bibliotecas Estáticas versus Bibliotecas Dinâmicas

Erika Caoili

Siga

dia 17 de Dezembro, 2019 · 4 min de leitura

Foto por Edwin Andrade Unsplash

o Que é uma biblioteca no Linux?Por que usamos bibliotecas?Como criar uma biblioteca estática e dinâmica?Como e por que os usamos?

uma biblioteca em Linux

uma biblioteca é uma coleção de peças pré-compiladas de código chamadas Funções. A biblioteca contém funções comuns e juntas formam um pacote chamado-BIBLIOTECA. Funções são blocos de código que são reutilizados ao longo do programa. Usar as peças de código novamente em um programa economiza tempo. Impede o programador de reescrever o código várias vezes. Para programadores, as bibliotecas fornecem funções reutilizáveis, estruturas de dados, classes e assim por diante.

“por exemplo, se você está construindo uma aplicação que precisa realizar operações matemáticas, você não tem que criar uma nova função matemática para isso, você pode simplesmente usar funções existentes em bibliotecas para essa linguagem de programação.”(“Understanding Shared Libraries In Linux”)

uma biblioteca não é executável e isso é uma diferença fundamental de processos e aplicações. As bibliotecas desempenham o seu papel em tempo de execução ou em tempo de compilação. Na linguagem de programação C, temos dois tipos de Bibliotecas: Bibliotecas dinâmicas e bibliotecas estáticas.

as bibliotecas têm arquivos objetos criados pelo "-c" gcc flag e terminam em ".o" por convenção. Eles são o resultado da saída do compilador e contêm definições de funções em forma binária.

Diferenças Entre a Dinâmica e Bibliotecas Estáticas

bibliotecas Dinâmicas ter um “*.assim,” convenção de nomenclatura e bibliotecas estáticas possuem um “*.a”.

bibliotecas dinâmicas ou compartilhadas ocorrem como arquivos separados fora dos arquivos executáveis. Assim, ele só precisa de uma cópia dos arquivos da biblioteca no tempo de execução. Em tempo de compilação, as bibliotecas estáticas permanecem bloqueadas em um programa. Ele contém os programas do arquivo segurando uma cópia dos arquivos da biblioteca em tempo de compilação.

ao usar uma biblioteca dinâmica, o programador está a referir-se a essa biblioteca quando precisa de o fazer em tempo de execução. Por exemplo, para acessar a função de comprimento de cadeia a partir da standard input/output header file — você pode acessá-la dinamicamente. Ele vai encontrar a referência da biblioteca do programa em tempo de execução por causa do carregador dinâmico. Ele então carrega essa função de comprimento de corda em memória. Assim, a acessibilidade dinâmica da biblioteca deve estar prontamente disponível ou ela se torna impotente.

vantagens e desvantagens das bibliotecas dinâmicas

  1. só precisa de uma cópia em tempo de execução. Depende de a aplicação e a biblioteca estarem estreitamente disponíveis uma para a outra.
  2. várias aplicações em execução usam a mesma biblioteca sem a necessidade de cada arquivo ter sua própria cópia.No entanto, e se a biblioteca dinâmica se tornar corrupta? O arquivo executável pode não funcionar porque ele vive fora do executável e é vulnerável a quebrar.
  3. eles possuem arquivos menores.
  4. as bibliotecas dinâmicas estão ligadas em tempo de execução. Não requer recompilação e relinking quando o programador faz uma mudança.

no momento da compilação, as aplicações utilizam bibliotecas estáticas. Todas as cópias das funções são colocadas no arquivo de aplicação porque elas são necessárias para executar o processo.

vantagens e desvantagens de bibliotecas estáticas

  1. bibliotecas estáticas resistem à vulnerabilidade porque ela vive dentro do arquivo executável.
  2. a velocidade em tempo de execução ocorre mais rápido porque seu código objeto (binário) está no arquivo executável. Assim, as chamadas feitas para as funções são executadas mais rapidamente. Lembre-se, a biblioteca dinâmica vive fora do executável, então as chamadas seriam feitas de fora do executável.
  3. as mudanças feitas nos arquivos e no programa requerem relinking e recompilação.
  4. o tamanho do ficheiro é muito maior.

como você cria uma biblioteca estática e dinâmica?

para ambas as bibliotecas, o seu programa deve incluir um prototype para cada uma das funções que existem na sua biblioteca. Se usar um arquivo header, não se esqueça de incluir o header filename.

#include "<header file name>"

Bibliotecas Dinâmicas

Para criar uma biblioteca dinâmica, escreva o seguinte comando:

gcc -g -fPIC -Wall -Werror -Wextra -pedantic *.c -shared -o liball.so

Com o "*.c" — leva todo o C-fonte de arquivos no diretório atual e faz uma biblioteca compartilhada chamado "liball.so." O -fPIC sinalizador permite o seguinte código para ser referenciado em qualquer endereço virtual em tempo de execução. Significa “posição Código independente”.A biblioteca não possui dados em endereços fixos porque sua localização na memória vai mudar entre programas. Os ficheiros de objectos são compilados usando o -shared flag. O compiler irá mais tarde identificar uma biblioteca, procurando por arquivos começando com "lib" e terminando com a Convenção de nomenclatura., .so

o programa precisa do caminho para procurar os arquivos da biblioteca. Então, você deve digitar o seguinte comando para adicionar essa localização à variável de ambiente chamada LD_LIBRARY_PATH.

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

ao usar a biblioteca dinâmica, escreva o seguinte comando:

gcc -g -wall -o app app.c liball.so

Bibliotecas Estáticas

Para criar uma biblioteca estática, precisamos usar o seguinte comando:

ar rc liball.a dog.o cat.o bird.o

O "ar" significa archive e é usado para criar a biblioteca estática. Todos os arquivos que terminam em ".o" serão adicionados ao liball.a library e eles são os arquivos objeto neste caso.

o -rc flag fará duas coisas: substituir e criar uma nova biblioteca se ela não existir já. O próximo passo é indexar, para fazer isso, nós digitar:

ranlib liball.a

ao usar a biblioteca estática, escreva o seguinte comando:

gcc main.c -L -l<filename>

o -L flag acessa o linker assim as bibliotecas podem ser encontradas no diretório dado. Além disso, ele também procura por outros locais onde o compilador procura por bibliotecas do sistema.

Deixe uma resposta

O seu endereço de email não será publicado.