1 / 17

GNU-ohjelmointityökalut

GNU-ohjelmointityökalut. Samppa Rönkä OH2. GNU ?.

hasad
Download Presentation

GNU-ohjelmointityökalut

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. GNU-ohjelmointityökalut Samppa Rönkä OH2

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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”.

  8. 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

  9. 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”

  10. 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

  11. 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

  12. 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

  13. 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.

  14. Kuva: emacs

  15. 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

  16. 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)

  17. 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

More Related