pilkunviilaaja iskee jälleen, monimutkaistaen hommia...
1) Ohjelma voidaan kääntää lähdekoodista joksikin... jotta se toimisi tietyn distron kanssa... kait.
Ohjelma käännetään (engl. is compiled) lähdekoodista joksikin toiseksi koodiksi, joka voi olla periaatteessa mitä tahansa, vaikka toisen ohjelmointikielen lähdekoodia, käytännössä kuitenkin useimmiten ns. konekieltä eli koneen ja käyttöjärjestelmän vaatimusten mukaista binaarikoodia. Jälkimmäisessä merkityksessä voidaan englannissa myös ”rakentaa” (build) koodista ohjelma.
Jakeluun kääntäminen liittyy lähinnä sikäli, että jakeluissa on esim. eri versiot kääntäjän tarvitsemista kirjastoista ja eri sijoituspaikat niin ohjelmille kuin kirjastoillekin.
jepjep. tässä vähän sivutaan toista käsitettä kuitenkaan ottamatta siihen varsinaisesti kantaa. tämä käsite on linkkaaminen. kun ohjelmoija kirjoittaa ohjelman valitsemallaan (käännettävällä) ohjelmointikielellä, hän tekee sen kirjoittamalla haluamansa toimintoja kuvaavan esityksen valitun ohjelmointikielen syntaksin mukaisesti. oletettavasti ohjelmoija ei kuitenkaan kirjoita aivan kaikkea toiminnallisuutta itse alusta asti, vaan käyttää valmiita toimintoja tarjoavia kirjastoja ja kutsuu niissä toteutettuja toimintoja. kun ohjelma sitten käännetään ohjelmointikielen syntaksin mukaisesta tekstitiedostosta konekieliseksi esitykseksi jotta tietokone osaisi sen suorittaa, ei ohjelma olekaan vielä täysin valmis, vaan toimiakseen se se pitää linkata käytettyjä kirjastoja vasten.
tämä linkkaaminen voi tapahtua dynaamisesti tai staattisesti. karkeasti ottaen dynaamisessa linkkauksessa vain kerrotaan ohjelmalle mistä kirjastoista se löytää tarvitsemansa toiminnot ajon aikana (windowsissa dll:t ovat kirjastoja joita vastaan linkataan dynaamisesti). staattisessa linkkauksessa puolestaan kirjastot liitetään osaksi syntyvää sovellusta.
jotta asia ei olisi liian yksinkertainen, ohjelmointikielten joukossa on myös kieliä joita ei käännetä konekieleksi vaan tavukoodiksi. esimerkkinä tällaisesta kielestä voi mainita vaikka javan. javaohjelmat käännetään java-kääntäjällä, jolloin java-lähdekoodista syntyy java-tavukoodia. tavukoodin yksi päämäärä on mahdollistaa saman käännetyn ohjelman käyttäminen eri käyttöjärjestelmissä. tämä onnistuu siten, että tavukoodin suorittaa erillinen tulkki, joka sitten ajon aikana luo tavukoodista tietokoneen ymmärtämiä komentoja ja suorittaa ne. tällöin mikä tahansa järjestelmä jolle on toteutettu kyseisen kaltaista tavukoodia tulkkaava ohjelma (tässä tapauksessa java-tulkki) pystyy suorittamaan tavukoodiksi kännetyn ohjelman ja teoriassa sen pitäisi toimia joka alustalla täsmälleen samalla tavalla. tämä ei tosin ole aivan totta.
2) kääntäminen useinkaan ei ole tarpeen, koska esim ubuntulle on jo tolkuton läjä ohjelmia.
Parempi syy olla kääntämättä on oikeastaan se, että Ubuntun paketinhallinta ottaa hoitaakseen ohjelman päivittämisen, kun käytät valmista pakettia etkä käännä ohjelmaa itse.
juu, silloin pitää tietysti suorittaa kääntämisen lisäksi myös paketointi
3) Lähdekoodi on siis jollain tavoin universaalimpi kuin se mikä käännöksestä tulee.
Aivan. Lähdekoodi ei ole samassa määrin alustakohtainen (missä alusta suunnilleen = koneen rauta + käyttis).
jos lähdekoodissa käytetään vain jokaiselle alustalle saatavilla olevia kirjastoja, lähdekoodista pitäisi pystyä kääntämään samalla tavalla toimivan ohjelman jokaiselle alustalle (jolle siis kyseisen kielen kääntäjä ja kirjastot löytyvät). jos siellä kuitenkin käytetään alustakohtaisia kirjastoja, on lähdekoodikin tietyllä tavalla alustasidonnaista.
4) esim. SuSe:n (tai jonkun toisen distron) ohjelmat eivät siis toimi Ubuntussa.
Saattavat toimiakin, mutta vaativat ehkä vähän sumplimista, eikä paketinhallinta sitten ehkä pysty hallitsemaan ohjelmaa (esim. mainittu SUSE käyttää ainakin toistaiseksi lähinnä RPM-, ei deb-paketteja).
tosiaan susessa käännetty, dynaamisesti linkitety, ohjelma saattaa toimia myös ubuntussa, mutta siitä ei ole mitään takeita. se riippuu hurjasti käytetyistä kirjastoista ja niiden versioista. staattisesti linkattu ohjelma puolestaan toimii paljon suuremmalla todennäköisyydellä, mutta sillä on ohat huonot puolensa.
5) Tuo ongelma korjaantuu joko etsimällä korvaava ohjelma tai kääntämällä ko. softa.
Parhaiten jos löytyy valmis paketti omaa distroasi varten.
juu, eli homman pitäisi hoitua joko etsimällä sama ohjelma omassa ympäristössä käänettynä, vastaava ohjelma tai kääntämällä ohjelma itse.
6) Ohjelmien 32 bittinen versiot voidaan kääntää 64 bittisiksi.
Parhaimmillaan se ei vaatine kuin kääntäjän säätämistä, mutta joskus on kajottava itse lähdekoodiinkin, ennen kuin lopputulos toimii.
aivan näin. tosin tarkennettakoon vielä, että suoritettavaa 32-bittistä ohjelmaa ei saa muutettua 64-bittiseksi, mutta lähdekoodin kanssa homma onnistuu.