![Page 1: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/1.jpg)
Ambiente de Desenvolvimento deProgramas
Walter Fetter [email protected]
Universidade Federal do Rio Grande do Sul
Escola de Engenharia
Departamento de Engenharia Elétrica
Programa de Pós-Graduação em Engenharia Elétrica
ELE00002 Sistemas de Automação
Copyright (c) Walter Fetter Lages – p.1
![Page 2: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/2.jpg)
Tópicos
• Editor de Textos• Compilador• Montador• Linker
• Linkagem Incremental• Linkagem Estática• Linkagem Dinâmica
• Make• Gerenciador de Bibliotecas• Depurador• Ambiente Integrado de Desenvolvimento
Copyright (c) Walter Fetter Lages – p.2
![Page 3: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/3.jpg)
Introdução
• Linguagem de máquina• Assembly• Montador• Compilador• SistemaHost• SistemaTarget
Copyright (c) Walter Fetter Lages – p.3
![Page 4: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/4.jpg)
Editor de Textos
• Produz o arquivo fonte (.c, .pas, .java,.cpp, . . . )• MS-DOS Editor (edit)• Windows notepad (notepad)• Norton Editor (ne)• Brief (brief)• Windows Programmer’s Editor (wpe)• Joe’s Own Editor (joe)• Visual Editor (vi)• VI Improoved (vim)• KDE Text Editor (kedit)• Editor of Macros (emacs)
Copyright (c) Walter Fetter Lages – p.4
![Page 5: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/5.jpg)
Compilador
• Traduz os módulos fonte para outra linguagem(.asm, .s) ou para módulos objeto (.obj, .o)• Microsoft C (cc)• Turbo Pascal (tpc)• Turbo C++ (tcc)• Borland C++ (bcc)• GNU Compiler Collection (gcc, g++, g77,gjc, . . . )
Copyright (c) Walter Fetter Lages – p.5
![Page 6: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/6.jpg)
Montador
• Traduz os módulos fonte em Assembly (.asm,.s) para módulos objeto (.obj, .o)• Microsoft Macro Assembler (ml, masm)• Turbo Assembler (tasm)• GNU Assembler (as)• Netwide Assembler (nasm)
Copyright (c) Walter Fetter Lages – p.6
![Page 7: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/7.jpg)
Linker
• Liga os diversos módulos objeto (.obj, .o) paracriar:• um programa executável, ou• um módulo maior, ou• uma biblioteca de linkagem dinâmica
• As referências internas são resolvidas• Microsoft Linker (link)• Turbo Linker (tlink)• GNU Linker (ld, collect2)
Copyright (c) Walter Fetter Lages – p.7
![Page 8: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/8.jpg)
Gerenciador de Bibliotecas
• Agrupa diversos módulos objeto (.obj, .o) emum arquivo de biblioteca (.lib, .a)
• As referências internasnãosão resolvidas• A unidade de linkagem é o módulo objeto
• Microsoft Library Manager (lib)• Turbo Library Manager (tlib)• GNU Archive (ar)
Copyright (c) Walter Fetter Lages – p.8
![Page 9: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/9.jpg)
Depurador
• debug• Codeview (cv)• Turbo Debugger (td)• GNU Debuger (gdb)
• Front-ends (xxgdb, kdbg)
Copyright (c) Walter Fetter Lages – p.9
![Page 10: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/10.jpg)
Linkagem Incremental
• Diversos módulos objeto são ligados para formarum módulo objeto maior
• São resolvidas as referências internas
Copyright (c) Walter Fetter Lages – p.10
![Page 11: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/11.jpg)
Linkagem Estática
• Um ou mais módulos são ligados para criar umprograma executável (.exe) ou imagem binária(.com)
• Podem ser ligados módulos em sí ou móduloscontidos em bibliotecas estáticas
• Cada programa tem a sua própria copia dosmódulos objeto (.obj, .o)
Copyright (c) Walter Fetter Lages – p.11
![Page 12: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/12.jpg)
Linkagem Dinâmica
• Bibliotecas dinâmicas (.dll, .so) não sãoligadas com o programa pelo linker
• Carregada pelo sistema operacional• Compartilhada por todos os programas que usam
a biblioteca dinâmica
Copyright (c) Walter Fetter Lages – p.12
![Page 13: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/13.jpg)
Make
• Programa para automatizar e otimizar o processode compilação e linkagem
• Executa apenas os procedimentos que sãonecessários
• Funciona baseado na comparação das datas ehoras dos arquivos
• Makefile = Arquivo interpretado pelomake• Microsoft Program Maintenance Utility
(make, nmake)• Borland Make (make)• GNU Make (make)
Copyright (c) Walter Fetter Lages – p.13
![Page 14: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/14.jpg)
IDE
• Editor, Compilador, Linker, Make, . . . integrados• Alguns podem ser configurados para utilizar
diversos compiladores, linkers, . . .• Microsoft Visual C (msc)• Turbo Pascal (turbo)• Borland C++ (bc)• Windows Programmer’s Editor (wpe)• KDE Development Environment
(kdevelop)
Copyright (c) Walter Fetter Lages – p.14
![Page 15: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/15.jpg)
Exemplo 1
• Hello, World! em C• hello.c• Makefile
Copyright (c) Walter Fetter Lages – p.15
![Page 16: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/16.jpg)
hello.c
#include <stdio.h>
int main(int argc,char *argv[]){
printf("Hello, world!\n");return 0;
}
Copyright (c) Walter Fetter Lages – p.16
![Page 17: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/17.jpg)
Makefile
CFLAGS=-O2 -Wall
CINCLUDE=-I. -I${HOME}/include
CLIBDIR=-L${HOME}/lib
CLIBS=
CPPFLAGS=
CPPINCLUDE=-I${HOME}/include/cpp -I../include
CPPLIBDIR=-L../lib
CPPLIBS=
INCLUDE=${CINCLUDE} ${CPPINCLUDE}
FLAGS= ${CFLAGS} ${CPPFLAGS}
LIBDIR=${CLIBDIR} ${CPPLIBDIR}
LIBS=${CPPLIBS} ${CLIBS}
CMP= gcc
CMPFLAGS= ${FLAGS} ${INCLUDE}
LDFLAGS= ${LIBDIR} ${LIBS}
Copyright (c) Walter Fetter Lages – p.17
![Page 18: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/18.jpg)
Makefile – Continuação
all: hello
hello: hello.c
${CMP} ${CMPFLAGS} -o $@ $^ ${LDFLAGS}
clean:
rm -f *~ *.bak *.o
install:
distclean: clean
rm -f hello
Copyright (c) Walter Fetter Lages – p.18
![Page 19: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/19.jpg)
Exemplo 2
• Hello, World! em C++• hello.cpp• Makefile
Copyright (c) Walter Fetter Lages – p.19
![Page 20: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/20.jpg)
hello.cpp
#include <iostream>
int main(int argc,char *argv[]){
cout << "Hello, world!\n";return 0;
}
Copyright (c) Walter Fetter Lages – p.20
![Page 21: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/21.jpg)
Makefile
CFLAGS=-O2 -Wall
CINCLUDE=-I. -I${HOME}/include
CLIBDIR=-L${HOME}/lib
CLIBS=
CPPFLAGS=
CPPINCLUDE=-I${HOME}/include/cpp -I../include
CPPLIBDIR=-L../lib
CPPLIBS=
INCLUDE=${CINCLUDE} ${CPPINCLUDE}
FLAGS= ${CFLAGS} ${CPPFLAGS}
LIBDIR=${CLIBDIR} ${CPPLIBDIR}
LIBS=${CPPLIBS} ${CLIBS}
CMP= g++
CMPFLAGS= ${FLAGS} ${INCLUDE}
LDFLAGS= ${LIBDIR} ${LIBS}
Copyright (c) Walter Fetter Lages – p.21
![Page 22: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/22.jpg)
Makefile – Continuação
all: hello
hello: hello.cpp
${CMP} ${CMPFLAGS} -o $@ $^ ${LDFLAGS}
clean:
rm -f *~ *.bak *.o
install:
distclean: clean
rm -f hello
Copyright (c) Walter Fetter Lages – p.22
![Page 23: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/23.jpg)
Exemplo 3
• Hello, World! em Assembly• Utiliza serviço do Linux para mostrarstring• Sintaxe dogas
• hello.s• Makefile
Copyright (c) Walter Fetter Lages – p.23
![Page 24: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/24.jpg)
hello.s
.intel_syntax noprefix
.text
.global _start
_start:
mov edx,offset len # 3rd arg. string length
mov ecx,offset msg # 2nd arg. pointer to string
mov ebx,1 # 1st arg. file handle (stdout)
mov eax,4 # system call number (sys_write)
int 0x80 # call kernel
xor ebx,ebx # 1st arg. exit code
mov eax,1 # system call number (sys_write)
int 0x80 # call kernel
.data
msg:
.string "Hello, world!\n"
len= . - msg
Copyright (c) Walter Fetter Lages – p.24
![Page 25: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/25.jpg)
Makefile
ASMFLAGS=-a=hello.lst --gstabs -n --32
INCLUDE=
FLAGS=${ASMFLAGS}
LIBDIR=
LIBS=
LD=ld
CMP=as
CMPFLAGS=${FLAGS} ${INCLUDE}
LDFLAGS=-m elf_i386
Copyright (c) Walter Fetter Lages – p.25
![Page 26: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/26.jpg)
Makefile – Continuação
all: hello
hello: hello.o
${LD} ${LDFLAGS} -o $@ ${LIBS} $^
hello.o: hello.s
${CMP} ${CMPFLAGS} -o $@ $^
clean:
rm -f *~ *.bak *.o
install:
distclean: clean
rm -f hello *.lst *.map .kdbgrc.*
Copyright (c) Walter Fetter Lages – p.26
![Page 27: Ambiente de Desenvolvimento de Programasfetter/ele00002/devel.pdf · • Programa para automatizar e otimizar o processo de compilação e linkagem • Executa apenas os procedimentos](https://reader033.vdocuments.site/reader033/viewer/2022051913/6003e724f113535f3202bb3d/html5/thumbnails/27.jpg)
Referências[1] S. Chamberlain and I. L. Taylor.Using ld, the GNU Linker, 2003.
<http://sourceware.org/binutils/docs> .
[2] D. Elsner, J. Fenlason, and friends.Using as, the GNU Assembler, 2002.
<http://sourceware.org/binutils/docs> .
[3] R. H. Pesch, J. M. Osier, and Cygnus Support.The GNU Binary Utilities,
1993.<http://sourceware.org/binutils/docs> .
[4] R. M. Stallman, R. McGrath, and P. Smith.GNU Make, A Program for
Directing Recompilation. Boston, 2002.
<http://www.gnu.org/software/make/manual/make.pdf> .
[5] R. M. Stallman, R. Pesch, S. Shebs, and etal.Debugging with GDB, The
GNU Source-Level Debugger. Boston, 2002.
<http://sourceware.org/gdb/current/onlinedocs/gdb.pdf.gz
[6] R. M. Stallman and The GCC Developer Community.Using the GNU
Compiler Collection, 2004.
<http://gcc.gnu.org/onlinedocs/gcc> .Copyright (c) Walter Fetter Lages – p.27