Ero sivun ”Kääntäminen” versioiden välillä

Siirry navigaatioon Siirry hakuun
säätöä
Kehityskirjastojen asennus eri jakeluissa
 
(36 välissä olevaa versiota 9 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
Ohjelma kannattaa yleisesti ottaen asentaa jotenkin [[Ohjelmien asentaminen|muuten]]. Jos itse kääntäminen on välttämätöntä, se käy yleensä näin:
{{vaihtoehdot|koodin kääntämistä konekieleksi|Ohjelmatekstin suomeksi kääntämisestä|kotoistus}}


# Tarkista että ainakin [[gcc]] ja [[make]] ovat asennettuina.
[[wikipedia:fi:Ohjelmointikielen kääntäjä|Kääntämisellä]] tarkoitetaan toimenpidettä, jossa ohjelman [[lähdekoodi]]n 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.
# Kopio ohjelman lähdekoodipaketti ja pura se ( [[tar]] xvzf hyvasofta.tar.gz / tar xvjf hyvasofta.tar.bz2)
# Siirry paketin hakemistoon (cd hyvasofta)
# Hakemistossa on yleensä tekstitiedostoja, joiden nimet ovat README, INSTALL taikka jotain muuta vastaavaa. Lue nämä ja varmista, että kääntäminen todella tapahtuu niin kuin seuraavassa kerrotaan.
# Aja configure-[[Bash-skriptaus|skripti]] komennolla ./configure. 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 (./install.sh)
# Jos configure-skripti ei mene kunnialla läpi, syy on usein puuttuvissa kehityskirjastoissa. Asenna siis mainitut kirjastot.
# Käännä ohjelma komennolla make
# Siirry pääkäyttäjäksi komennolla su - ja asenna ohjelma komennolla make install (ks. [[CheckInstall]])


Joskus configure-skriptissä tulee virheitä puuttuvien pakettien kanssa. Tällöin täytyy vain etsiä jostain tarvittava [[kirjasto]] ja asentaa se ensin. On myös mahdollista, että kirjasto itsessään on jo asennettuna, mutta sen header - tiedostoja ym. sisältävä kehityspaketti puuttuu. Esimerkiksi, mikäli configure jää kaipaamaan libaudiofile - pakettia ja se on asennettuna, saattaa kehityspaketti olla nimeltään ([[Debian]]in tapauksessa) libaudiofile-dev. Debianissa ohjelman kääntämiseen tarvittavat kirjastot on useimmiten helppo asentaa komentamalla:
Jos haluat muokata oman jakelusi pakettia, tämä kannattaa tehdä [[Jakelu|jakelun]] omilla työkaluilla ja mieluiten jakelun omasta lähdekoodista. Oman jakelun lähdekoodipaketit on yleensä mahdollista asentaa [[paketinhallinta|paketinhallinnan]] kautta erillisestä asennuslähteestä (source).
apt-get build-dep ohjelma


On myös suositeltavaa käyttää configure:n kanssa parametriä --prefix=/opt/hyvasofta jolloin ohjelma asentuu annettuun polkuun (yleensä /opt-alkuinen) ja sieltä se on helppo tarvittaessa poistaa.  
Jatkossa käsitellään muualta haetun lähdekoodin kääntämistä ja asentamista ilman jakelun omia työkaluja.


Joskus Makefilessä on myös uninstall-toiminto, jolla ohjelma poisto onnistuu kätevästi komennolla <tt>make uninstall</tt>. Huomaa kuitenkin, että mikäli esimerkiksi poistat näin jonkin kirjaston, sitä käyttävät ohjelmat lakkaavat toimimasta.
 
== 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.
 
<syntaxhighlight lang="bash">
# 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
 
</syntaxhighlight>
 
=== 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. Se käyttää tyypillisesti [[Ninja]]-työkalua käännösprosessin suorittamiseen.
 
==== Tyypillinen prosessi ====
<syntaxhighlight lang="bash">
# 1. Luo käännöshakemisto (Meson hoitaa tämän itse)
meson setup builddir
 
# 2. Käännä ohjelma Meson-hakemistossa
meson compile -C builddir
 
# 3. Asenna ohjelma järjestelmään
sudo meson install -C builddir
</syntaxhighlight>
 
=== Ninja ja riippuvuuksien hallinta ===
[[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.
 
Kaikki rakennusjärjestelmät tarvitsevat usein apua löytääkseen järjestelmästä puuttuvat kehityskirjastot (headerit). ''[[pkg-config]]'' on standardi työkalu, joka auttaa rakennusjärjestelmiä löytämään tarvittavat kirjastotiedostot ja niiden sijainnit.
 
== Perinteinen GNU Autotools -tapa ==
Vaikka nykyaikaiset järjestelmät ovat yleistyneet, tämä prosessi on edelleen validi ja käytössä monissa vanhemmissa tai yksinkertaisemmissa projekteissa.
 
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:
 
'''1. Valmistelut:''' Tarkista, että ainakin [[gcc]] ja [[make]] ovat asennettuina.
 
'''2. Lähdekoodin haku ja purku:'''
 
[[tar]] xvzf hyvasofta.tar.[[gz]]
tai
tar xvjf hyvasofta.tar.[[bz2]]
 
tai käytä ohjelmistoprojektin [[versionhallintajärjestelmä]]ä (esim. [[Git]]).
 
'''3. Siirry hakemistoon komennolla:'''
cd hyvasofta
 
Lue hakemistossa olevat ''README''- tai ''INSTALL''-tiedostot.
 
'''4. configure -tiedoston luonti (tarvittaessa):''' Mikäli configure-tiedostoa ei löydy, aja ''autoreconf''-[[Bash-skriptaus|skripti]] komennnolla:
 
autoreconf -i
 
autoreconf ajaa automaattisesti tarvittavat ohjelmat ja luo configure-skriptin.
 
'''5. Konfigurointi:''' Aja ''configure''-[[Bash-skriptaus|skripti]] komennolla:
 
./configure
# tai määrittele asennuspolku käyttäjän kotihakemistoon:
./configure --prefix=$HOME/ohjelmat/
 
* Riippuvuudet: Jos ''configure'' epäonnistuu puuttuvien riippuvuuksien vuoksi (kehityskirjastot eli headerit), ne löytyvät paketinhallinnasta yleensä päätteellä ''-devel'' tai ''-dev''. [[Debian]]-pohjaisissa jakeluissa ne on usein helppo asentaa komennolla:
 
sudo apt-get build-dep ohjelma
 
{| class="wikitable"
|+ Kehityskirjastojen asennus eri jakeluissa
|-
! Jakeluperhe (Paketinhallinta) !! Yleinen pääte !! Esimerkki asennuskomento
|-
| Debian, Ubuntu, Mint (APT) || -dev || sudo apt install libssl-dev
|-
| Fedora, Red Hat, CentOS (RPM / DNF) || -devel || sudo dnf install openssl-devel
|-
| Arch, Manjaro (Pacman) || Ei yleistä päätettä, usein pelkkä paketin nimi || sudo pacman -S openssl
|-
| OpenSUSE (Zypper) || -devel || sudo zypper install openssl-devel
|}
 
 
'''6. Kääntäminen:'''
make
 
'''7. Asennus:''' Siirry [[pääkäyttäjä]]ksi ja asenna ohjelma (katso kuitenkin kohta [[Kääntäminen#Kääntäminen ja paketinhallinta|Kääntäminen ja paketinhallinta]]):
 
sudo make install
 
'''8. Siivoaminen ja poisto:''' Voit poistaa luodut binäärit ja Makefilen lähdekoodihakemistosta komennolla ''make clean''. Joskus Makefilessa on myös poistotoiminto ''make uninstall''.
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.
 
Katso esimerkiksi [[CheckInstall]], sekä [[Deb-paketin tekeminen]].
 
Jos käännettävä ohjelmisto tarjoaa jotakin toiminnallisuutta, josta paketinhallinnan olisi hyvä olla tietoinen, voit luoda niin sanotun '''"dummy"'''-paketin. Dummy-paketti sisältää vain riippuvuudet ja muun metadatan. Debianissa tällaisen paketin tekoon on olemassa apupaketti ''equivs''.


[[Luokka:Järjestelmä]]
[[Luokka:Järjestelmä]]
[[Luokka:Kehitystyökalut]]
[[Luokka:Kehitystyökalut]]
[[Luokka:Ohjeet]]