Ohjelmointi Linuxissa Tehnyt: Antti Martikainen (1300698) Sisällysluettelo 1. Mitä tarvitaan sovellusten tuottamiseen?...1 2. GNU Toolchain...2 3. Tekstieditorit...2 4. Hello world-sovelluksen luominen vi-editorilla...3 5. Ohjelmointiympäristöt...4 6. Hello world-sovelluksen luominen Eclipsella...6 7. Lähteet...7 1. Mitä tarvitaan sovellusten tuottamiseen? Sovellusten ja ohjelmistojen tuottamiseen vaaditaan kolme asiaa: tekstieditori, kääntäjä ja standardikirjasto. Tekstieditorilla, joka voi olla mikä tahansa tekstin tuottamiseen tarkoitettu sovellus, kirjoitetaan itse lähdekoodi. Lähdekoodi voidaan kirjoittaa millä tahansa tuhansilla ohjelmointikielillä, joista suosituimpia ovat mm. C, C++, Java, Perl, PHP ja Python. Linuxille on saatavilla useita ohjelmointiin soveltuvia perustekstieditoreita, kuten vi, gedit, kedit ja emacs. Kääntäjä nimensä mukaisesti kääntää tai tulkkaa ohjelmointikielellä kirjoitetun lähdekoodin tietokoneen ymmärtämään muotoon, jotta tietokoneen prosessorit voivat käsitellä koodin binäärimuotoisena. Jotkin kääntäjät kääntävät yhdestä ohjelmointikielestä toiselle ohjelmointikielelle. Natiivikääntäjät kääntävät koodin samalle alustalle kuin millä koodi on tuotettu, kun taas ristiinkääntäjät voivat kääntää koodia myös muilla alustoilla toimivaksi. Kääntäjien tehtävänä on myös mm. koodin nopeuden maksimointi ja koon minimointi sekä kääntämisprosessin nopeuden maksimointi. Standardikirjastot sisältävät kokoelman ohjelmointikielelle ominaisia yleisesti käytettyjä aliohjelmia ja luokkia. Standardikirjasto sisältää samat aliohjelmat valmistajasta riippumatta. Fedo-
ran asennuksen yhteydessä asennetaan The GNU libc-kirjasto (glibc), joka sisältää C-kielen standardikirjaston ja matematiikkakirjaston. 2. GNU Toolchain GNA Toolchain on kattotermi, joka sisältää kokoelman GNU Projectin valmistamia ohjelmointityökaluja. Se kattaa kaiken tarvittavan sovellusten ja käyttöliittymien tuottamiseen. Se sisältää seuraavat komponentit: GNU Compiler Collection (GCC) sisältää kääntäjät C-, C++-, Objective C-, Fortran-, Java- and Ada-ohjelmointikielille. GCC:tä pidetään yhtenä maailman tärkeimpinä ilmaisina tuotteina. GNU make on työkalu, joka käytetään ohjelmien buildaukseen ja makefilejen tuottamiseen. Buildaus kattaa koodin kääntämisen, linkittämisen, pakkaamiseen, testauksen ja dokumennoinnin. GNU Binutils sisältää linkittäjän (koodikirjastojen yhdistäjän), assemblerin (symbolisen konekielen kääntäjän) ja muita työkaluja, joita käytetään yhdessä kääntäjien kanssa GNU Bisons on parser generator, joka käsittelee ohjelmointikielen kielioppisääntöjä GNU Debugger (GDB) on koodin debuggaustyökalu, jota käytetään ohjelman muokkaamiseen ja virheiden jäljittämiseen ajon aikana GNU build system (autotools) sisältää työkaluja koodipaketin siirtämiseen Unix-tyyppisten järjestelmien välillä. Se sisältää GNU Autoconf-, GNU automake-, GNU Libtool- ja Gnulibtyökalut. GNU m4-makroprosessori (preprosessori) käsittelee tekstinkäsittelyä ja tekstin korvaamista 3. Tekstieditorit Vi ja nano ovat Fedoran asennuksen yhteydessä asennettavia tekstieditoreita. Vi:stä (englannin kielen sanasta visual ) on olemassa pidemmälle kehiteltyjä versioita, kuten nvi (new vi) ja
vim (vi improved). Vi-tekstieditori käynnistetään terminaalissa vi-komennolla, jolloin sovellus aukeaa muokkaustilassa. I-näppäimellä päästään kirjoitustilaan, jossa voidaan kirjoittaa tekstiä asiakirjaan. Kirjoitustilasta poistutaan esc-näppäimellä muokkastilaan, jossa asiakirja voidaan esimerkiksi tallentaa ctrl+w-komennolla ja sovelluksesta poistutaan ctrl+x-komennolla. Nanoeditori toimii samalla tavalla, mutta tallentaminen tapahtuu ctrl+o-komennolla. Emacs on erityisen suosittu tekstieditori ohjelmoijien piirissä. Emacs on suurempi ja monipuolisempi kuin vi ja nano, mutta myös vaikeakäyttöisempi, raskaampi ja monimutkaisempi. Emacsissa on ohjelmointitila, jossa on mahdollista saada käyttöön rajoitettuja ohjelmointiympäristön ominaisuuksia, kuten syntaktin väritys sekä erilaisia menu-toimintoja, jotka auttavat koodin luettavuudessa. Emacs tunnistaa käsiteltävän tekstitiedoston päätteestä, missä tilassa sitä muokataan, Windowsin Notepad++-editorin tapaan. 4. Hello world-sovelluksen luominen vi-editorilla Tässä käydään pikaisesti läpi, kuinka vi-editorilla voi luoda perinteisen Hello worldsovelluksen C-kielellä. Käynnistetään terminaalissa vi-editori ja luodaan uusi C-päätteinen tiedosto haluttuun hakemistoon: vi hello.c Tämän jälkeen avautuvassa editorissa painetaan I-näppäintä, joilloin päästään kirjoitustilaan. Kirjoitetaan editoriin seuraava lähdekoodi: #include <stdio.h> main() { printf( Hello world! \n ); return 0; }
Lähdekoodi lienee melko tuttu kaikille ohjelmoinnin peruskurssin käyneelle. Aluksi otetaan käyttöön C-standardikirjasto, sillä sovelluksen halutaan kirjoittaa näkyviin tekstiä prinftmetodilla. Main()-metodi on sovelluksen päämetodi, jossa määritellään, että halutaan kirjoittaa näkyviin Hello World sekä rivinvaihto. Metodi päätetään return 0 -vakiokomennolla, sillä C- ja C++-kielissä kaikki metodit palauttavat jonkun arvon. Koodin kirjoittamisen jälkeen tekstitilasta poistutaan esc-näppäimellä, ja tiedoston sisältö tallennetaan ctrl+wnäppäinyhdistelmällä, minkä jäleen tekstieditorista poistutaan ctrl+x-näppäinyhdistelmällä. Tämän jälkeen terminaalissa käännetään tehty lähdekoodi GCC:n C-kääntäjällä: gcc o hello hello.c Gcc-komento viittaa C-kielen kääntäjään. Mikäli käännettäisiin esim. C++-tiedostoja, olisi vastaava komento g++. o hello-komento määrittää kääntäjälle halutun polun ja nimen luotavalle sovellukselle ja hello.c-komento määrittää käännettävän lähdekooditiedoston polun ja nimen. Tässä tapauksessa luodaan hello-niminen sovellus samaan kansioon kuin hello.clähdekoodikin. Tämän jälkeen sovellus voidaan ajaa samaan tapaan kuin muutkin sovellukset, kirjoittamalla terminaalissa sovelluksen nimi, eli hello, jolloin terminaaliin pitäisi ilmestyä (mikäli kääntäjä ei havaitse lähdekoodissa virheitä) teksti Hello world!. 5. Ohjelmointiympäristöt Ohjelmointiympäristö (IDE, integrated development environment) on integroitu joukko ohjelmia, joilla voidaan toteuttaa ohjelmistoja käyttämättä erillisiä ohjelmia esim. ohjelmointiin, kääntämiseen, linkittämiseen, virheenetsintään tai buildaukseen. Ohjelmointiympäristöjen perusominaisuuksia ovat mm. syntaksikorostus (koodin värittäminen), lauseiden ennakoiminen ja syntaksivaihtoehtojen esittäminen (intellisense), koodin ulkoasun automaattinen muotoilu, virhetilanteiden ja käyttämättömien muuttujien paikantaminen ja korjausehdotusten antaminen, ohjelman ajaminen debug-tilassa ja tuki useille ohjelmointikielille ja erinäisille liitännäisille.
Joissakin tapauksissa koodia voi tehdä vain hiirtä klikkailemalla ja käyttämällä valmiita pohjia. Linuxille on tarjolla iso määrä erilaisia ohjelmointiympäristöjä, jotka on tarkoitettu käytettäväksi lähinnä jollain tietyllä ohjelmointikielellä, mutta jotka useimmiten toimivat muilla kielillä liitännäisten avulla. Seuraavassa on esitelty joitakin suosituimpia ohjelmointiympäristöjä Eclipse Käytetään pääasiassa Java-ohjelmointiin, mutta sisältää laajat liitännäismahdollisuudet muille ohjelmointikielille (Ada, ABAP, C, C++, COBOL, Fortran, Haskell, JavaScript, Lasso, Perl, PHP, Python, R, Ruby, Scala, Clojure, Groovy, Scheme ja Erlang). Sisältää tuen erillisille C++- ja Java-ohjelmointiympäristöille erillisillä JDT- ja CDT-paketeilla. Komodo Sisältää mm. kehittyneen koodieditorin, intellisensen, graafisen debuggauksen, erilaisia integroituja työkaluja, liittännäisiä sekä samanlaiset ominaisuudet eri alustoille (Macille, Linuxille ja Windowsille). Toisin kuin suurin osa Linuxin ohjelmointiympäristöistä, Komodo on maksullinen. Komodoa käytetään pääasiassa web-kielillä ohjelmointiin: Python, PHP, Ruby, Perl, HTML, CSS ja JavaScript. Code::Blocks Perustuu myös liitännäisiin, joilla ohjelmointiympäristöä voi muokata halutunlaiseksi. Sisältää tärkeimmät IDE-ominaisuudet pääasiassa C-, C++- ja Fortran-kielille. Toimii Linuxin lisäksi Macilla ja Windowsilla. Netbeans Tarkoitettu pääasiassa Java-, JavaScript-, HTML-, PHP-, Python-, Ruby-, Groovy-, C-, C++-, Scala- ja Clojure-kielille. Sisältää mm. helppokäyttöisen GUI-rakentajan ja visuaalisen mobiili-, web- ja Java-kehitysympäristön.
MonoDevelop Käytetään pääasiassa C#-kielellä sekä muilla.net-kielillä ohjelmoimiseen. Voidaan helposti siirtää koodia esim. Windowsin Visual Studiosta Linuxille. Muita saatavilla olevia ohjelmointiympäristöjä ovat mm. CodeLite, Anjuta, Geany, KDevelop, Oracle Solaris Studio, Lazarus, Qt Creator ja Sublime text, jotka keskittyvät kaikki tiettyihin ohjelmointikieliin ja niitä voidaan laajentaa liitännäisillä. 6. Hello world-sovelluksen luominen Eclipsella Eclipse on monipuolinen ohjelmointiympäristö, joka tukee mm. Java- ja C++-kieliä. Seuraava esimerkki toteutetaan Eclipsen C++-tilassa, jota varten tarvitaan erikseen ladattava C/C++ Development Toolkit (CDT) -paketti, ja tietenkin myös Eclipse tulee erikseen ladata ja asentaa. Eclipse avataan eclipse-komennolla terminaalissa. Eclipsen perusnäyttötila koostuu keskellä olevasta koodieditorista, yläosan valikoista, alaosan konsoli-ja debuggaus-ikkunasta, vasemman reunan projektimanagerista sekä oikean reunan Outline-ikkunasta, jossa näytetään koodissa käytetyt muuttujat, aliohjelmat ja luokat. Hello world-sovellus voidaan Eclipsella luoda valmiista pohjasta. Kun C++-paketti on asennettu, voidaan C++-projekteja luoda valitsemalla File/New/Project ja valitsemalla projektin tyypiksi C++ project, jolloin C++ Project Wizard aukeaa. Tässä vaiheessa voidaan valita käytettävä toolchain riippuen siitä, halutaanko tehdä alustojen välinen vai pelkästään Linuxilla toimiva sovellus. Project types-listasta voidaan valita projektin tyypiksi Hello World C++ Project ja nimetä se halutulla nimellä. Muissa ikkunoissa voidaan jättää oletusarvot päälle ja painaa Next ja lopuksi Finnish. Tulostettua tekstiä voi tosin muuttaa jo Basic Settings-ikkunan Hello world greeting-kohdassa. Tämän jälkeen projektimanagerissa pitäisi avautua äsken luotu projekti ja koodieditorissa näkyä sen lähdekoodi, jonka on tarkoitus tulostaa samanlainen teksti kuin aiemmassa C-kielellä
tehdyssä sovelluksessa, mutta tällä kertaa C++-kielellä toteutettuna, joten syntaksi on hieman erilainen: #include <iostream.h> int main(void) { cout << "Hello world!" << endl; return 0; } Kun koodin toimivuutta halutaan testata, ei erillistä kääntäjää tarvitse ajaa terminaalista, vaan koodi voidaan buildata Eclipsen sisällä valitsemalla File/Build Project. Buildaaminen kattaa kääntämisen lisäksi kirjastojen linkittämisen, joten erillistä kääntämistä ei tarvitse suorittaa. Konsolinäkymässä näkyy buildauksen tiedot. Tämän jälkeen sovellusta voidaan testata valtisemalla Run/Run Last Launched/Run, minkä jälkeen sovelluksen tulosteen ( Hello world! ) pitäisi ilmestyä konsolinäkymään. Toki tällaista sovellusta ei kukaan tee, mutta tämä esimerkki kuvaa sitä, kuinka paljon yksinkertaisempaa on aloittelevan ohjelmoijan toteuttaa yksinkertaisia sovelluksia ohjelmointiympäristössä, kun ohjelma ilmoittaa virheistä ja muokkaa koodin luettavampaan muotoon ja koodin toimivuuden testaaminen on nopeampaa. 7. Lähteet http://www.linfo.org/create_c1.html http://www.linfo.org/gcc.html http://www.linfo.org/compiler.html https://admin.fedoraproject.org/pkgdb/acls/name/glibc http://en.wikipedia.org/wiki/gnu_toolchain http://linux.fi/wiki/emacsin_perusk%c3%a4ytt%c3%b6 http://fi.wikipedia.org/wiki/ohjelmointiymp%c3%a4rist%c3%b6
http://komodoide.com/ http://www.eclipse.org/ http://fi.wikipedia.org/wiki/eclipse_(ide) http://www.codeblocks.org/ https://netbeans.org/ http://www.linuxlinks.com/article/20080426144510229/netbeans.html http://en.wikipedia.org/wiki/netbeans http://monodevelop.com/ http://penguininside.blogspot.fi/2009/08/top-10-multi-language-ides-for-linux.html http://www.linuxlinks.com/article/20090620114618990/ide.html