Desenvolvimento de Bibliotecas

Documentos relacionados
Desenvolvimento de programas em UNIX

Linguagem C Introdução. Contexto Histórico Principais diferenças do Java Funções em C Compilar programas em C no Linux

%LEOLRWHFDV(VWiWLFDVH'LQkPLFDV

Departamento de Engenharia Informática. Sistemas Operativos 1. Utilitário Make

Programação. Module Introduction. Cap. 1 Fundamentos de Computadores

Programação 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação. Cap. 7 Arrays. Arrays

Elementos de Linguagem C

Ligação e Relocação. Noemi Rodriguez Ana Lúcia de Moura Raúl Renteria.

16. Compilação no Linux

Bibliotecas são arquivos que contêm módulos reutilizáveis pré-compilados que serão usados por desenvolvedores de aplicações.

Ana Paula Tomás. Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto 2010/2011

Algoritmos e Programação

Linguagem C. Produção de programas em C (Ligação dinâmica) João Pedro Patriarca

ENGENHARIA DE PRODUÇÃO PROGRAMAÇÃO Algoritmos Conceitos Iniciais. Prof. Luiz Fernando Laguardia Campos FMS

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal

Linguagem de Programação C

Introdução à Lógica de Programação

Programação I A Linguagem C. Prof. Carlos Alberto

Programação: Vetores

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Engenharia de Software

Desenvolvimento de programas em UNIX

Motivação. Estrutura de Dados. Motivação. Motivação. Por que estudar os tipos de dados? Duas são as principais preocupações em um projeto de software

Introdução à linguagem C

Introdução a linguagem C. Introdução à Programação 06/07

Introdução à Programação Aula 16. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Linguagem C. André Tavares da Silva.

Sumário. Ficheiros. Ficheiros

PROGRAMAÇÃO E ALGORITMOS (LEII) Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2016/2017

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano

Conhecendo a Linguagem de Programação C

Linguagem C Ficheiros Compilação Separada

Programação : Engenharia Informática 6619 : Tecnologias e Sistemas de Informação. Cap. 6 Subprogramas I Subprogramas I

Programação Mestrado Integrado em Engenharia Aeronáutica 1º ano, 1º semestre. T. 05 Subprogramas I

Ambiente de desenvolvimento

Mestrado em Engenharia Física Tecnológica

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Programação. Folha Prática 1. Lab. 1. Departamento de Informática Universidade da Beira Interior Portugal Copyright Ó 2000 All rights reserved.

SSC304 Introdução à Programação Para Engenharias. Introdução a Linguagem C. GE4 Bio

Linguagem C Funções. André Tavares da Silva.

Conceitos básicos de programação de sistemas. ambientes UNIX e Linux Taisy Silva Weber

Linguagem C. Produção de programas em C (Ligação estática) Centro de Cálculo Instituto Superior de Engenharia de Lisboa

USP - ICMC - SSC SSC o. Semestre 2010 Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

INSTITUTO FEDERAL DE! EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

3. Linguagem de Programação C

Arquitetura e Organização de Computadores. Compiladores e processamento

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes

A ferramenta make. A - Introdução. O C é orientado para a produção de aplicações informáticas de grande dimensão

Estruturas de Dados. Módulo 4 Funções. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Introdução à Programação

INTRODUÇÃO À LINGUAGEM C

Laboratório de Introdução à Ciência da Computação I

TAD: Tipo Abstrato de Dados (parte 2)

Controlo de Execução. K&R: Capitulo 3

TAD: Tipo Abstrato de Dados (parte 2)

facilita o trabalho em equipe, com diferentes grupos trabalhando em cada módulo independente.

Programação. MEAer e LEE. Manipulação de ficheiros de texto. Bertinho Andrade da Costa. Instituto Superior Técnico. 2010/2011 1º Semestre

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

Aula 3 Primeiros programas

Aula 2: Introdução a Linguagem C

Laboratório de Introdução à Ciência da Computação I

Introdução a Computação

Programação de Computadores II. Cap. 9 Tipos Abstratos de Dados (TAD)

INTRODUÇÃO À LINGUAGEM C

Apontadores/ponteiros

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Fundamentos de Programação

Ferramentas Programação. UDESC - Prof. Juliano Maia 1

Técnicas de Programação em Engenharia Elétrica I - Engenharia de Sistemas Embarcados - Prof. Alessandro Zimmer Introdução à Linguagem C

Aula 10: Funções (Parte III)

Linguagem C Princípios Básicos (parte 1)

Métodos Computacionais

Linguagem C: diretivas, compilação separada. Prof. Críston Algoritmos e Programação

SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO E DO DESPORTO CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS CEFET-MG UNIDADE DE ENSINO

Linguagem de Programação C

Universidade Estadual de Mato Grosso do Sul Ciência da Computação Algoritmos e Estruturas de Dados I (AED-I) Prof. Nilton

#include <stdio.h> main() { int i; // Cabeçalho for (i = 1; i <=20; i++) putchar( * ); putchar( \n ); puts( Numeros entre 1 e 5 );

Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C

Introdução à Linguagem C

Algoritmos e Estruturas de Dados I (DCC/003) Funções

Implementação da programação modular II

Aula 3 Constantes e funções de E/S

Material sobre Funções AEDS 1

Estrutura de Programas e Tipos de Dados Simples

A separação dos programas em módulos (ficheiros) é uma prática indispensável que facilita a produção, manutenção e a reutilização de software.

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

Linguagem de Programação I. Aula 10 Funções

#include <stdio.h> void Swap (int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } main () {

Vetores. e o programa deverá ler os valores separadamente:

Ambiente de Desenvolvimento

Conceitos Básicos sobre Programação Prática

PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

A linguagem C (visão histórica)

Transcrição:

5 Desenvolvimento de Bibliotecas Sumário: Tipos de bibliotecas: arquivo (.a) e partilhada (.so)bibliotecas do sistema (libc, libm,...) Criação duma biblioteca estática Visualização do conteúdo duma biblioteca estática Substituição dos módulos objecto duma biblioteca estática Adição de módulos objecto a uma biblioteca estática Eliminação de módulos objecto duma biblioteca estática Sumário das chaves do comando ar Comunicação entre funções Onde colocar as bibliotecas estáticas? Unificação de bibliotecas e programas Gestor de compilação de programas (make) 6-1

Tipos de bibliotecas Há dois tipos básicos de bibliotecas: Estáticas (ou archive). A característica fundamental duma biblioteca estática ou arquivo é que na unificação de código objecto com um programa do utilizador, o código da biblioteca é incluído dentro do executável. Portanto, se houver cinco programas que incluam a mesma biblioteca estática no seu código executável, temos cinco cópias da biblioteca em memória, o que é claramente um desperdício em termos de ocupação da memória. Dinâmicas (ou partilhadas). Estas bibliotecas, tal como o nome no-lo diz, são partilhadas pelos programas que as usam. Só existe uma cópia duma biblioteca dinâmica em memória, independentemente do número (um ou mais) de programas que a usem em tempo de execução. Para LINUX As bibliotecas estáticas têm extensão.a, ao passo que as bibliotecas dinâmicas têm extensão.so. Criação duma biblioteca estática Há duas fases principais na criação duma biblioteca estática: Criação dos ficheiros em código objecto (*.o) Nesta fase usa-se o compilador cc com a opção c. Junção dos ficheiros em código objecto numa biblioteca estática (archive library) Nesta fase usa-se o arquivador ar. biblioteca s.t. file1.c compiler file1.o archiver file1.o file2.c file3.c cc c... file2.o file3.o ar... file2.o file3.o 6-2

Conteúdo duma biblioteca estática Uma biblioteca estática está dividida em três secções: Cabeçalho:!<arch>\n Identifica o ficheiro referente à biblioteca como um ficheiro arquivador (archive file) criado por ar (\n representa um carácter newline) Tabela de símbolos: É usada pelo unificador (ou linker) para encontrar a localização, o tamanho e ainda informação adicional relativa a cada rotina e a cada dado existentes na biblioteca. Módulos objecto: Existe um para cada ficheiro objecto especificado no comando ar. Exemplo de construção duma biblioteca estática: libunits.a Pretende-se construir uma biblioteca de funções que estão contidas em três ficheiros distintos, nomeadamente: length.c, volume.c e mass.c: #include <units.h> const float VALOR=2.5; length.c float in_to_cm (float in) // inches to cm return (in * VALOR); volume.c float gal_to_l (float gal) // gallons to liters return (gal * 3.79); mass.c float oz_to_g (float oz) // ounces to grams return (oz * 28.35); Geração dos ficheiros objecto $ cc c length.c volume.c mass.c Arquivação dos ficheiros objecto na biblioteca libunits.a $ ar r libunits.a length.o volume.o mass.o 6-3

Criação do ficheiro de protótipos units.h da biblioteca libunits.a Para se poder usar a biblioteca libunits.a, há que criar um ficheiro de protótipos das funções implementadas pela biblioteca. Seja units.h o ficheiro de protótipos da biblioteca libunits.a. float in_to_cm (float); float gal_to_l (float); float oz_to_g (float); units.h A utilização de qualquer função desta biblioteca num programa requer a inclusão do ficheiro units.h no início do dito programa através da directiva #include. Só assim se satisfaz o princípio fundamental das linguagens imperativas: só se pode usar uma variável (ou função) se tiver sido declarada previamente. Colocação da biblioteca libunits.a no sistema de ficheiros do UNIX Após a criação da biblioteca libunits.a, há que guardá-la num local facilmente acessível a outros programadores. Existem dois locais principais que o unificador (ou linker) procura por defeito na fase de junção ou unificação do código objecto: /lib /usr/lib Colocação do ficheiro de protótipos units.h no sistema de ficheiros do UNIX Após a criação do ficheiro units.h, há que guardá-lo num local facilmente acessível a outros programadores: /include /usr/include Deste modo, qualquer programa que pretenda usar a biblioteca libunits.a, deve fazer a inclusão do ficheiro de protótipos units.h do seguinte modo: #include <units.h> Se, porventura, o programador não colocou o ficheiro units.h numa das duas directorias estandardizadas acima indicadas, mas o colocou na directoria corrente de trabalho, a sua inclusão é feita do seguinte modo: Se, o programador colocou na directória /home/users/projects/include a sua inclusão seria feita com #include /home/users/projects/include 6-4

Exemplo de compilação sem biblioteca: Pretende-se criar um ficheiro executável convert.exe, cujo código fonte é o seguinte: #include <stdio.h> int main(void) float inches, centimetros; printf ( NORMAL Escreva um valor polegadas: ); scanf( %f, &inches); centimetros = in_to_cm(inches); printf( O seu valor em centimetros=%f\n,centimetros); return(0); convert.c Geração do executável convert.exe $ cc o convert.exe convert.c length.o mass.o volume.o Exemplo de utilização duma biblioteca estática: libunits.a Pretende-se utilizar a biblioteca libunits.a na criação dum ficheiro executável convertst.exe, cujo código fonte é igual em tudo do ficheiro convert.sh excepto no primeiro printf: #include <stdio.h> int main(void) float inches, centimetros; printf ( STATIC Escreva um valor polegadas: ); scanf( %f, &inches); centimetros = in_to_cm(inches); printf( O seu valor em centimetros=%f\n,centimetros); return(0); convertst. Geração do executável convertsh.exe $ cc o convertst.exe convertst.c libunits.a Exercício: Alterar o constante no ficheiro length.c para o valor 2.54,actualize a biblioteca estática libunits.a e criar de novo o executável. Para saber substituir uma parte duma biblioteca estática consulte o man ar. 6-5

Criação duma biblioteca dinâmica ou partilhada Há duas fases principais: Criação dos ficheiros em código objecto (*.o) Nesta fase usa-se o compilador cc com a opção c. Junção dos ficheiros em código objecto numa biblioteca partilhada (shared object library or dynamic link library) Nesta fase usa-se o coompilador cc (Linux) ou libtool (Mac/Darwin). cc shared -fpic -o nome_biblioteca ficheiros_objectos Exemplo de construção duma biblioteca estática: libunits.so Utilzamos o comando $ cc shared fpic o libunits.so length.o volume.o mass.o Nota: na maquina alunos.di.ubi.pt (Mac/Darwin) utilize-se o libtool Exemplo de utilização duma biblioteca dinâmica: libunits.so Pretende-se utilizar a biblioteca libunits.a na criação dum ficheiro executável convertsh.exe, cujo código fonte é igual em tudo do ficheiro convert.sh excepto no primeiro printf: #include <stdio.h> int main(void) float inches, centimetros; printf ( DYNAMIC Escreva um valor polegadas: ); scanf( %f, &inches);... convertsh. Geração do executável convertsh.exe $ cc o convertsh.exe convertsh.c libunits.so Exemplo de execução dum programa que utilize bibliotecas dinâmicas Problemas na execução do convertsh.exe? Investigue a variável do shell LD_LIBRARY_PATH $ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. $ Export LD_LIBRARY_PATH 6-6