Documente Academic
Documente Profesional
Documente Cultură
Compilarea programelor
CSE Dep
1/48
Moto
There are only two kinds of programming languages: those people always bitch about and those nobody uses. Bjarne Stroustrup One of the main causes of the fall of the Roman Empire was that lacking zero they had no way to indicate successful termination of their C programs. Robert Firth
CSE Dep
2/48
CLI
prompt
comenzi
terminal
interfa
operatori
expandare
escapare
variabile
CSE Dep
3/48
Unix shell
http://www.fireboxtraining.com/blog/wp-content/uploads/2012/02/Unix.png
CSE Dep
4/48
Suport curs
CSE Dep
5/48
Programe
Ce este un program?
s a) , ier executabil binar (cont , inutul este cod mas , in
Perl, Python, Lisp etc. se mai numes a (surs a C, surs a Java, etc.) , te simplu surs scriere de cod surs a sau scriere de cod
la nceput programele erau scrise direct n cod mas a (binar) , in (cartele perforate)
CSE Dep
7/48
Editoare
integrate (IDE)
Visual Studio 2010 (varianta Visual Studio Express Edition este free) Eclipse, NetBeans Emacs, Kdevelop
facilit at ,i
syntax higlighting, auto indentation, utilitare pentru debugging integrate code folding, code completion (autocompletion)
CSE Dep
8/48
Emacs
CSE Dep
9/48
Eclipse
CSE Dep
10/48
Compilare s , i interpretare
un s a poate compilat sau interpretat , ier cod surs deosebirea ntre compilare s , i interpretare
compilare: codul surs a este translatat de un program denumit compilator n cod mas a, dup a care poate executat , in interpretare: un program este executat direct din cod surs a prin intermediul unui interpretor
CSE Dep
12/48
Compilare s , i interpretare
avantaje/dezavantaje
interpretare
limbaje, n general, mai us nt , or de , eles de programator debugging facil execut a , ie lent
compilare
debugging greoi (folosirea unui depanator debugger) vitez a reidicat a de execut , ie
CSE Dep
13/48
My codes compiling
http://xkcd.com/303/
CSE Dep
14/48
Compilare
un compilator este un translator
translateaz a codul surs a n cod obiect; de la un limbaj de nivel nalt n cod mas a , in
CSE Dep
15/48
Compilare (cont.)
Compilare n Linux
n@asgard:~/code$ ls main.c razvan@asgard:~/code$ gcc main.c razvan@asgard:~/code$ ls a.out main.c razvan@asgard:~/code$ file a.out a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), not stripped
CSE Dep
16/48
asamblare: as
translaterea s n limbaj de asamblare ntr-un modul , ierului obiect (cod mas a) , in
linking: ld
legarea mai multor module obiect s ntr-un modul de , i biblioteci sine st at ator (de obicei un s , ier executabil)
CSE Dep
18/48
CSE Dep
19/48
componenta vizibil a programatorului declarat , ii de variabile, funct , ii, clase etc. sintaxa impus a de limbajul respectiv s ier text ( ntr-un limbaj de programare) ,
memcap.c btdownloadheadless.py checkpatch.pl dispatch.rb
CSE Dep
20/48
I Write Code
http://i1.cpcache.com/product/19460466/i_write_code_mousepad.jpg
CSE Dep
21/48
CSE Dep
22/48
Preprocesare
CSE Dep
23/48
CSE Dep
24/48
Compilare
t , ine cont de sintaxa s , i semantica programului
sintax a: programul respect a un set de reguli (o anumit a gramatic a)
operatorul + poate avea doi operanzi sau poate avea unul singur
se obt sier in limbaj de asamblare , ine program incorect din punct de vedere sintactic sau semantic erori la compilare:
Erori de compilare
razvan@asgard:~/code$ gcc main.c main.c: In function `main: main.c:6: error: `i undeclared (first use in this function) main.c:6: error: (Each undeclared identifier is reported only once main.c:6: error: for each function it appears in.)
CSE Dep
25/48
Compilare (2)
#include <stdio.h> #define ITERATIONS 10 #define INITIAL 1 #define HEADER_STRING "Number sum:" int main (void) { int i; int sum; sum = 0; printf (HEADER_STRING); for (i = INITIAL; i < INITIAL + ITERATIONS; i++) sum += i; printf ("%d\n", sum); return 0; }
razvan@asgard:~/code$ gcc -S simple.c razvan@asgard:~/code$ cat simple.s .file "simple.c" .section .rodata .LC0: .string "Number sum: " .LC1: .string "%d\n" .text .globl main .type main, @function main: pushl %ebp movl %esp, % ebp subl $24, %esp andl $-16, %esp ... movl $0, -8(%ebp) movl %,LC0, (%esp) call printf ...
26/48
CSE Dep
CSE Dep
27/48
Limbaj de asamblare
CSE Dep
28/48
CSE Dep
29/48
CSE Dep
30/48
Asamblare
Asamblare
razvan@asgard:~/code$ as -o simple.o simple.s razvan@asgard:~/code$ objdump --disassemble simple.o simple.o: file format elf32-i386 Disassembly of section .text: 00000000 <main>: 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 ec 18 sub $0x18,%esp 6: 83 e4 f0 and $0xfffffff0,%esp 9: b8 00 00 00 00 mov $0x0,%eax e: 29 c4 sub %eax,%esp 10: c7 45 f8 00 00 00 00 movl $0x0,0xfffffff8(%ebp) 17: c7 04 24 00 00 00 00 movl $0x0,(%esp) 1e: e8 fc ff ff ff call 1f <main+0x1f> 23: c7 45 fc 01 00 00 00 movl $0x1,0xfffffffc(%ebp) ... 4f: e8 fc ff ff ff call 50 <main+0x50> 54: b8 00 00 00 00 mov $0x0,%eax 59: c9 leave 5a: c3 ret
CSE Dep Cursul 6, Compilarea programelor 31/48
Asamblare (2)
translatarea s n limbaj de asamblare n s , ierului , ier cod obiect instruct n limbaj de asamblare se traduc una c ate una n , iunile echivalentul lor binar (cod mas in a ) , asamblor
Exemplu rulare as
razvan@asgard:~/code$ as -o simple.o simple.s
CSE Dep
32/48
CSE Dep
33/48
U.............). .E.......$......
Biblioteci
bibliotec a = library = libr arie colect atre programe stocate , ie de funct , ii des utilizate de c ntr-un singur s , ier (modul)
e fapt, o colect siere binare) , ie de module obiect (
CSE Dep
36/48
Biblioteci (cont.)
CSE Dep
37/48
CSE Dep
38/48
Linking
mai multe module obiect (inclusiv biblioteci) sunt grupate ntr-un modul de sine st at ator (de obicei executabil) la legare/linking se rezolv a referint , ele
un modul apeleaz a o funct a) dintr-un alt , ie (sau o variabil modul n urma compil arii se creeaz a o referint a c atre acea funct , , ie (f ar a a se s n ce modul se g ases , ti , te) linker-ul rezolv a aceste referint asind funct , e, g , iile (variabilele) apelate din alte module dac a se apeleaz a o funct ases , ie dintr-un modul ce nu se reg , te la linking, apare eroare la linking
CSE Dep
39/48
Crearea de biblioteci
s a funct , ierul add.c implementeaz , ia add, iar sub.c implementeaz a funct , ia sub biblioteca va cont a module , ine cele dou
Crearea s , i legarea unei biblioteci statice
razvan@asgard:~/code$ razvan@asgard:~/code$ razvan@asgard:~/code$ razvan@asgard:~/code$ add.o sub.o razvan@asgard:~/code$ gcc -Wall -c add.c gcc -Wall -c sub.c ar cr libsimple.a add.o sub.o ar t libsimple.a
gcc -Wall -fPIC -c add.c gcc -Wall -fPIC -c sub.c gcc -fPIC -shared -o libsimple.so add.o sub.c export LD_LIBRARY_PATH=. gcc -Wall -L. -o lib_main lib_main.c -lsimple
Cursul 6, Compilarea programelor 40/48
The Dragon Book Aho, Sethi, Ullman 2nd Edition, 2006 cartea de baz a pentru toate cursurile de compilatoare din universit at ,i expunere exhaustiv a a analizei sintactice, semnatice s ,i parserelor
CSE Dep
42/48
inventatorul limbajului de programare Python Benevolent Dictator for Life (BDFL) pentru Python activeaz a la Google
CSE Dep
43/48
google.com cel mai folosit site din lume fondat a de Larry Page s , i Sergey Brin lansat a n 1998 init , ial: search engine + advertising aplicat , ii web Android Chrome YouTube
CSE Dep
44/48
Valgrind
http://valgrind.org detectarea de probleme la rulare (runtime ) n principal folosit pentru probleme de lucru cu memoria Linux s , i Darwin (Mac OS X) un engine peste care ruleaz a componente dedicate: memcheck (implicit), cachegrind, callgrind, helgrind
CSE Dep
45/48
Cuvinte cheie
limbaj de asamblare asamblare cod obiect bibliotec a linker executabil cpp, gcc, gas, ld objdump, nm
CSE Dep
46/48
Resurse utile
CSE Dep
47/48