Coluna do Alexandre
COLUNA
Bibliotecas
estáticas em C
Utilizando bibliotecas de forma a melhorar
o reaproveitamento de código.
N
esta coluna, a ideia é revisar os passos necessários
para construção de bibliotecas estáticas. Como
o leitor sabe, usar bibliotecas é uma maneira de
não precisar a todo o momento reinventar a roda e, para
uma programação recorrente, poder utilizar funções précompiladas do mesmo modo que já é feito quando usamos
chamadas como printf(), scanf(), rand() etc. Portanto,
definitivamente, uma biblioteca é uma coleção de arquivos-objetos que estão disponíveis para serem referenciadas
quando estamos construindo uma aplicação de maneira
que não seja preciso programar novas funções dentro do
nosso programa e sim, apenas construir o aplicativo referenciando-as, poupando com isto tempo e esforço.
Quando construímos bibliotecas estáticas e as utilizamos na elaboração de uma aplicação, estas são incorporadas no resultado final, não sendo mais necessário
tê-las presentes para que o executável funcione.
Seguem os arquivos que usaremos para nosso exemplo. A proposta é um programa simples que calcula a
área de um quadrado e a área de um triângulo, dados os
valores fornecidos pelo usuário. O arquivo area.h fornece
as declarações das funções, o arquivo funcao1.c fornece
o cálculo do quadrado, o arquivo funcao2.c fornece o
cálculo do triângulo e, por fim, o arquivo principal.c
representa o nosso programa de teste:
Arquivo area.h
/* Declaração das funções que calculam as áreas */
#ifndef __AREA_H
#define __AREA_H
extern int quadrado(int lado1) ;
extern float triangulo(int base, int altura);
#endif /* __AREA_H */
func1.c :
#include <stdio.h>
/* Função que calcula a área do quadrado */
int quadrado(int lado)
20
{
int areaq ;
areaq = lado * lado ;
return areaq ;
}
Arquivo func2.c
#include <stdio.h>
/* Função que calcula a área do triângulo */
float triangulo(int lado, int altura)
{
float areat ;
areat = (float)(lado * altura)/2 ;
return areat ;
}
Arquivo principal.c
#include “area.h”
#include <stdio.h>
/* Programa de teste */
int main()
{
int lq ;
int bt ;
int ht ;
int areaquadrado ;
float areatriangulo ;
printf("Este programa calcula as areas do quadrado
e do triangulo.\n\n");
printf("Entre o valor do lado do quadrado: ") ;
scanf("%d", &lq) ;
printf("Entre o valor da base do triangulo: ") ;
scanf("%d", &bt);
printf("Entre o valor da altura do triangulo: ") ;
scanf("%d", &ht);
areaquadrado = quadrado(lq) ;
areatriangulo = triangulo(bt,ht) ;
http://www.linuxmagazine.com.br
printf("\n\nO quadrado de lado %d
tem area igual a
%d.\n\n",lq,areaquadrado);
printf("O triangulo de base %d
e altura %d tem area igual a
%.2f\n\n",bt,ht,areatriangulo);
return ;
}
Normalmente, faríamos a compilação
deste programa da seguinte maneira:
# gcc principal.c func1.c func2.c -o
linuxmagazine
No caso de uso de bibliotecas estáticas, faça:
#
#
#
#
gcc -c -Wall func1.c
gcc -c -Wall func2.c
ar -cru libstaticarea.a func1.o func2.o
gcc principal.c -L. -lstaticarea -o
linuxmagazine
O que foi feito? Fácil! Criamos os objetos func1.o e func2.o. Depois foi criada
a biblioteca estática e, por fim, usamos
a mesma para criar a aplicação linuxmagazine. As opções do comando ar são: -c
(cria uma biblioteca estática staticarea,
porém é necessário que haja a string lib
como parâmetro), -r (troca os objetos
existentes na biblioteca estática caso eles
já existam) e -u (apenas faz a troca dos
objetos se eles forem mais novos do que
os já existentes). A opção -L. aponta para
o local da biblioteca estática staticarea e
-l aponta para a biblioteca em si (não há
espaço entre a opção e o nome da biblioteca). Agora é só executar:
# ./linuxmagazine
Na próxima coluna vamos rever bibliotecas compartilhadas. Até mais! n
Alexandre Borges ([email protected], twitter:
@ale_sp_brazil) é Especialista Sênior em Solaris,
OpenSolaris e Linux. Trabalha com desenvolvimento, segurança, administração e performance desses sistemas operacionais, atuando como instrutor
e consultor. É pesquisador de novas tecnologias e
assuntos relacionados ao kernel.
Download

Bibliotecas estáticas em C