170 likes | 279 Views
GNU-ohjelmointityökalut. Samppa Rönkä OH2. GNU ?.
E N D
GNU-ohjelmointityökalut Samppa Rönkä OH2
GNU ? • GNU (GNU's Not Unix) on ohjelmoija Richard Stallmanin vuonna 1983 käynnistämä projekti, jonka tavoitteena on kehittää täydellinen Unixin kaltainen käyttöjärjestelmä, joka on vapaa ohjelmisto: GNU-järjestelmä, joka on vapaasti käytettävissä ja muokattavissa GNU-lisenssin mukaisesti. • Nykyisin GNU-projekti toimii Free Software Foundationin alaisuudessa.
GCC ? • Richard Stallman kehitti GCC-kääntäjän vuonna 1987 GNU-projektiaan varten. • Nykyään GCC:tä kehittää sekalainen joukko ohjelmoijia ympäri maailman. • Käännetty useammalle suorittimelle ja käyttöjärjestelmälle kuin mitään muuta kääntäjää. • GNU-järjestelmän sekä sen Linux-pohjaisten varianttien (GNU/Linux) virallinen kääntäjä. • Käytössä lukuisissa muissa käyttöjärjestelmissä, kuten BSD:issä, Mac OS X:ssä, NeXTSTEPissä ja BeOSissa.
GCC ? • GCC on yleisin kääntäjävalinta kun halutaan tehdä koodia jota ajetaan monenlaisella raudalla. • Sama parseri ympäristöstä riippumatta – Jos koodi kääntyy yhdessä ympäristössä, se todennäköisesti toimii kaikissa. • Joissain tapauksissa tuottaa hitaampia käännöksiä kuin natiivit kääntäjät. • …mutta on ilmainen.
Ohjelmointikielet • GCC:n versio 4.1.0:n (28.2.2006) standardi julkaisu sisältää tuen seuraaville kielille: - Ada (GCC for Ada aka GNAT) - C - C++ (GCC for C++ aka G++) - Fortran (GCC for Fortran aka GFortran) - Java (GCC for Java aka GCJ) - Objective-C - Objective-C++ • Lisäksi saatavilla mm: Pascal, Modula-2, Modula-3, Mercury, VHDL, ja PL/I.
Arkkitehtuurit • GCC tukee seuraavia suorittimia: Alpha, ARM, Blackfin, H8/300, System/370, System/390, IA-32 (x86) & AMD64, IA-64 i.e. the "Itanium”, Motorola 68000, Motorola 88000, MIPS, PA-RISC, PDP-11, PowerPC, SuperH, SPARC, VAX, Renesas R8C/M16C/M32C families, MorphoSys family • Lisäksi vähemmän tunnettuja: A29K, ARC, Atmel AVR, C4x, CRIS, D30V, DSP16xx, FR-30, FR-V, Intel i960, IP2000, M32R, 68HC11, MCORE, MMIX, MN10200, MN10300, NS32K, ROMP, Stormy16, V850, ja Xtensa.
Työkalut: gcc • ”gcc” suorittaa joukon muita ohjelmia jotka kääntävät ohjelmakoodin ajettavaan muotoon • C-kielinen ohjelma käännetään seuraavasti: gcc ohjelma.c –o esi-merkki • Tuloksena on ajettava tiedosto nimeltään ”esi-merkki”.
Työkalut: gcc • gcc käännöksen vaiheet: 1. Esikäsittely: cpp ”C Pre-Processor”, käsittelee #-komennot kuten #include, #macro ja #ifdef 2. Käännös: cc1 kääntää C-koodin assembleriksi 3. Optimointi: assembler-koodiin tehdään suorituskykyä parantavia muutoksia, cc1 hoitaa tämän 4. Assembler: assembler ”as” kääntää assembler-koodin objektitiedostoksi 5. Linkkeri: linkkeri kasaa objektitiedostot ja lisäkirjastot ajettavaksi tiedostoksi
Työkalut: make • työkalu joka kääntää ohjelman automaattisesti • lukee Makefile-tiedostosta käännösohjeet, katsoo tiedostojen päivämääriä, ja kääntää uudelleen kaiken, mikä riippuu jostain muuttuneesta tiedostosta • Makefilessa voi olla useita käännösvaihtoehtoja, esim. make all tai make foo.o • usein myös make clean, joka poistaa käännöksen tulokset (ajaa joukon rm-komentoja) • usein myös make clean, joka poistaa käännöksen tulokset (ajaa joukon rm-komentoja) • ohje: ”info make”
Esimerkki Makefile CC = gcc CFLAGS = -Wall -g # tai esim. CFLAGS = -Wall -O2 -g LDFLAGS = LIBS = # LIBS = -lm jos tarvitaan TARGET = prog OBJS = prog.o mysort.o all: $(TARGET) clean: rm -f $(OBJS) $(TARGET) $(TARGET): $(OBJS) $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) %.o: %.c $(CC) -c $(CFLAGS) $< .PHONY: all clean
Työkalut: gdb • gdb on debuggeri, jolla voi: - keskeyttää ohjelman suorituksen - tutkia muuttujien arvoja - jatkaa suoritusta esim. rivi kerrallaan - pysähtyä aina kun päästään tiettyyn kohtaan tai tietty ehto täyttyy - katsoa core-tiedostosta mihin kaatunut ohjelma jäi - tavoitteena etsiä bugeja tai katsoa, miten ohjelman suoritus etenee - gdb = GNU-projektin debuggeri (muutkin samankaltaisia, esim. Javan jdb) • C-ohjelma pitää kääntää -g-optiolla (muuten saa vähemmän tietoa). • Käyttö: gdb ohjelma
Työkalut: diff & patch • Todella kätevä tapa päivittää koodia • diff etsii eroavaisuuksia kahdesta tiedostosta • patch muokkaa tiedostoa diffin tulosteen perusteella • versionhallintatyökaluissa (kuten CVS) diff on yleensä integroituna valmiiksi • Käyttö yleensä: diff -u vanha-koodi.c uusi-koodi.c
Työkalut: emacs • Emacs on ”kätevä” tekstieditori, jossa on paljon ohjelmointia helpottavia ominaisuuksia, kuten: - avainsanojen väritys - koodin kääntö suoraan editorista - man-sivujen selaus • Useimmat graafisten kehitysympäristöjen toiminnot löytyvät jossain muodossa Emacsistakin.
Työkalut: valgrind • Valgrind on ”muistinhallintadebuggeri”, joka ajaa C-ohjelman (hitaasti) ja kertoo, missä kohdissa se: - käytti alustamatonta muistia - kirjoitti olemattomaan paikkaan pinossa - kirjoitti muualle kuin mallocilla varatulle muistialueelle ym. • mukana myös muita työkaluja, mm. cachegrind kertoo kuinka ohjelma käyttää välimuistia
Muita työkaluja • Autoconf auttaa hyvin porttautuvan C-koodin kääntämisessä • Automake on Autoconfin päälle rakennettu kokonaisvaltaisempi Makefilejen rakentaja • versionhallintaan: RCS, CVS, Subversion • gprof eli ”profiler” kertoo, missä funktioissa ohjelma vietti eniten aikaa (info gprof, man gprof)
Lähteet • Sisältö lainattu enemmän tai vähemmän suoraan näistä: - http://www.gnu.org - http://gcc.gnu.org/onlinedocs/gcc- 4.1.0/gccint/index.html#Top - http://www.cs.hut.fi/Opinnot/T-106.3100/K2006/Luennot/unix-kalvot.pdf - http://en.wikipedia.org/wiki/GNU_Compiler_Collection - http://fi.wikipedia.org/wiki/GNU - http://cslibrary.stanford.edu/107/UnixProgrammingTools.pdf