Kääntäminen

Linux.fista
Versio hetkellä 13. marraskuuta 2025 kello 20.45 – tehnyt Lahtis (keskustelu | muokkaukset)
Siirry navigaatioon Siirry hakuun

Tämä artikkeli käsittelee koodin kääntämistä konekieleksi. Ohjelmatekstin suomeksi kääntämisestä kerrotaan artikkelissa kotoistus.


Kääntämisellä tarkoitetaan toimenpidettä, jossa ohjelman lähdekoodin perusteella luodaan konekielinen ohjelma, joka on tietokoneen ymmärtämässä muodossa. Samasta lähdekoodista voidaan yleensä kääntää versiot monille eri alustoille. Lähdekoodia on myös mahdollista muokata itse, kun taas konekielisen ohjelman muokkaaminen on käytännössä erittäin rajoitettua.

Jos haluat muokata oman jakelusi pakettia, tämä kannattaa tehdä jakelun omilla työkaluilla ja mieluiten jakelun omasta lähdekoodista. Oman jakelun lähdekoodipaketit on yleensä mahdollista asentaa paketinhallinnan kautta erillisestä asennuslähteestä (source).

Jatkossa käsitellään muualta haetun lähdekoodin kääntämistä ja asentamista ilman jakelun omia työkaluja.


Nykyaikaiset rakennusjärjestelmät

CMake

CMake on yksi yleisimmistä ja de facto -standardeista rakennusjärjestelmistä monissa C/C++-projekteissa, erityisesti suurissa projekteissa kuten KDE-ympäristössä.

Tyypillinen prosessi

Modernit kääntämistavat suosivat ulkopuolista käännöstä (out-of-source build). Tämä tarkoittaa, että kääntämisen luomat tiedostot (Makefile, objektit yms.) sijoitetaan omaan erilliseen hakemistoon (esim. build), jolloin lähdekoodihakemisto pysyy puhtaana.

# 1. Luo erillinen käännöshakemisto ja siirry sinne
mkdir build
cd build

# 2. Luo käännöstiedostot (Makefiles) lähdekoodin perusteella (lähdekoodi on ".." eli yksi ylöspäin hakemistorakenteessa.)
cmake .. 

# 3. Käännä ohjelma (voidaan käyttää make- tai cmake --build -komentoa)
make

# 4. Asenna ohjelma järjestelmään
sudo make install

on: ''cmake .'', ''make'' (tai ''cmake --build .''), ''sudo make install''.

Meson

Meson on uudempi, nopea ja suosittu rakennusjärjestelmä, joka on yleistynyt erityisesti GNOME-ympäristön ja monien muiden vapaan lähdekoodin projektien keskuudessa.

Tyypillinen prosessi on: meson setup builddir, meson compile -C builddir, sudo meson install -C builddir.

Ninja on nopea, matalan tason rakennusjärjestelmä, jota Meson käyttää suoraan ja jonka CMake voi valita taustajärjestelmäksi perinteisen Makefilen sijaan käännösprosessin nopeuttamiseksi.

Moderneissa järjestelmissä käytetään usein erillistä builddir (kuten Mesonissa) tai build-hakemistoa (yleinen tapa myös CMake:ssa), kun taas Autotoolsissa komennot ajetaan suoraan lähdekoodihakemistossa. Moderneissa tavoissa tavoitteena on pitää lähdekoodihakemisto puhtaana (engl. out-of-source build), jotta käännöksen luomat tiedostot (Makefile, binäärit yms.) eivät sotke alkuperäisiä tiedostoja. Tämä helpottaa siivoamista (rm -rf builddir) ja eri käännösversioiden ylläpitoa.

Perinteinen GNU Autotools tapa

Vaikka tämä prosessi on edelleen validi ja käytössä monissa vanhemmissa tai yksinkertaisemmissa projekteissa, se ei enää edusta ainoaa tai edes yleisintä tapaa kääntää ohjelmia nykyaikaisessa Linux-ympäristössä.

Ohjelmat kannattaa yleisesti ottaen asentaa jotenkin muuten kuin muualta haettua koodia kääntämällä. Jos itse kääntäminen on välttämätöntä, käy se yleensä näin:

  • Tarkista että ainakin gcc ja make ovat asennettuina.
  • Hanki jostakin ohjelman lähdekoodit, joko kopioi ohjelman lähdekoodipaketti ja pura se
tar xvzf hyvasofta.tar.gz 

tai

tar xvjf hyvasofta.tar.bz2

tai käytä ohjelmistoprojektin versionhallintajärjestelmää.

  • Siirry paketin hakemistoon.
cd hyvasofta
  • Hakemistossa on yleensä tekstitiedostoja, joiden nimet ovat README, INSTALL tai vastaavaa. Lue nämä ja varmista, että kääntäminen todella tapahtuu niin kuin seuraavassa kerrotaan.
autoreconf -i
  • autoreconf ajaa automaattisesti autoconf-, autoheader-, aclocal-, automake-, gettextize- ja libtoolize-ohjelmat oikeassa järjestyksessä ja luo configure-skriptin.
./configure

tai

./configure --prefix=$HOME/ohjelmat/

Jos käyttää tällaista vipua käytetään niin käännetty ohjelma pitäisi löytyä hakemistosta $HOME/ohjelmat/bin.

Configure luo käännöksessä tarvittavan Makefilen. Jos configure-skriptiä ei ole, kokeile komentoja make config ja/tai make menuconfig. Jos mistään ei tapahdu mitään, katso olisiko hakemistossa install.sh-tyylistä skriptiä. Jos on, aja se komennolla:

./install.sh

Osassa ohjelmapaketteja saattaa myös olla Makefile valmiina, jolloin configurea ei ole, eikä sitä tarvitse ajaa.

  • Jos configure-skripti ei mene kunnialla läpi, on syy usein puuttuvissa kehityskirjastoissa eli headereissa (skripti mainitsee jonkin tietyn riippuvaisuuden puuttuvan). Nämä löytyvät paketinhallinnan kautta yleensä päätteellä -devel tai -dev (esimerkiksi gimp-devel, pääte vaihtelee jakeluittain). Tilan säästämiseksi useimpien ohjelmien paketointien mukana ei toimiteta niiden kehityskirjastoja, vaan nämä on asennettava erillisestä paketista. Joskus ongelmana voi myös olla se, ettei configure löydä tarvittavaa riippuvaisuutta vaikka se ja sen kehityskirjastot olisi asennettu. Tällöin niiden sijainti on yleensä mahdollista määritellä erillisellä valitsimella. Lisätietoja valitsimista saa komennolla:
./configure --help

Myös INSTALL- tai README-tiedostoissa on usein mainittu asiasta jotakin. Debian-pohjaisissa jakeluissa kehityskirjastot on yleensä helppo asentaa komennolla apt-get build-dep ohjelma.

  • Käännä ohjelma komennolla:
make

Käännön aikana ruutuun tulostuu yleensä runsaasti tietoa käännön etenemisestä. Jos make-komento ei mene läpi, vaan pysähtyy ilmoittaen virheestä jollakin rivillä, on lähdekoodissa todennäköisesti vikaa. Yleensä kyse on lähdekoodin epäyhteensopivuudesta käytetyn kääntäjäversion kanssa. Virheilmoituksen perusteella saattaa olla mahdollista helpostikin korjata virhe. Muussa tapauksessa kannattaa lähettää palautetta ohjelman kehittäjälle.

sudo make install

Tämä kopioi käännetyt binäärit lopulliseen asennushakemistoonsa. Mikäli et halua asentaa ohjelmaa pääkäyttäjänä, voit antaa tunnuksellesi kirjoitusoikeudet asennushakemistoon asennuksen ajaksi. Voit toki käyttää ohjelmaa myös lähdekoodihakemistosta käsin tai määrittää sopivan asennuspolun omasta kotihakemistostasi. Tämä tapahtuu configuren valitsimella --prefix, esimerkiksi --prefix=/home/kayttaja/hyvasofta.

Joskus Makefilessä on uninstall-toiminto, jolla ohjelma poisto onnistuu kätevästi komennolla:

make uninstall 

Huomaa kuitenkin, että mikäli esimerkiksi poistat näin jonkin kirjaston, sitä käyttävät ohjelmat lakkaavat toimimasta. Jos jostain syystä haluat kääntää ohjelman uudelleen, voit poistaa luodut binäärit ja Makefilen lähdekoodihakemistosta komennolla:

make clean

Kääntäminen ja paketinhallinta

Kenties paras vaihtoehto on tehdä käännetystä ohjelmasta oman jakelun mukainen paketti ja asentaa se paketinhallinnan kautta. Tällöin komentoa make install ei anneta, vaan tilalle tulee jakelun omat paketinluomis- ja asennuskomennot. Katso esimerkiksi CheckInstall sekä Deb-paketin tekeminen.

Jos käännettävä ohjelmisto tarjoaa jotakin toiminnallisuutta, josta paketinhallinnan olisi hyvä olla tietoinen, tämän voi kertoa paketinhallinnalle, vaikka itse ohjelmasta ei tekisikään oikeata ohjelmapakettia. Tähän käyttöön sopii "dummy"-paketti, joka sisältää vain riippuvuudet ja muun metadatan. Debianissa tällaisen paketin tekoon on olemassa apupaketti equivs.