Valid HTML 4.01! Valid CSS
Anybrowser

Navigatie:


Home - Linux beginners - Software zelf compileren

logo

.



Home
Printbaar

Nieuws

Nieuwe distributie
Onlangs zijn we overgestapt op een nieuwe Linux-distributie, nl. Pardus Linux

Dit lijkt ons een prima distributie, zowel voor beginners als experts.



19. Software compileren en installeren

Veel Linux-gebruikers vermijden het liever, omdat het ingewikkeld en moeilijk zou zijn: het zèlf compileren van een programma. Toegegeven: het gaat niet altijd direct goed, maar dat is ook het geval met voorgecompileerde software in .rpm of .deb formaat. En soms kan het gewoon niet anders, omdat het betreffende programma alleen maar in broncode te verkrijgen is. Dit artikel laat zien hoe het zelf compileren in zijn werk gaat en hoe problemen daarbij aangepakt kunnen worden.

Het zelf compileren van software heeft z'n voordelen. Om er enkele te noemen:

  • Je kunt beschikken over de nieuwste versie van het programma. De .rpm of .deb pakketten van veel programma's lopen vaak enige tijd achter.
  • Je kunt allerlei zaken aan de installatie zelf instellen, o.a. in welke directorie de verschillende bestanden geïnstalleerd moet worden.
  • Je kunt de software optimaliseren voor jouw hardware, m.n. je processor.

Deze laatste twee punten zijn niet echt iets voor beginners, maar we zullen het in de loop van het artikel toch even aanstippen.

Compileren? Wat is dat?

Een computerprogramma bestaat in de praktijk uit een lange reeks enen en nullen. Het schrijven van een programma rechtstreeks in deze "computertaal" is voor een mens niet te doen. Maar computers kunnen ons daar behulpzaam bij zijn. Wij kunnen een programma schrijven in een taal, die voor velen nog wel te leren is (Basic, Fortran, Python, Pascal, C, C++, enz.), waarna de computer het omzet naar die enen en nullen.
Er zijn ruwweg 2 manieren om die vertaling te maken:

  • Interpretatie: Als het programma gestart wordt, worden de opdrachten van dat programma gestuurd naar een zgn. interpreter, die die opdrachten rechtstreeks ("on the fly") omzet in enen en nullen en direct uitvoert. Bekende voorbeelden daarvan zijn perl en python, en natuurlijk de scripttalen van de verschillende shells, zoals bash, en ook de ouderwetse DOS-interpreter qbasic.
  • Compilatie: Hier wordt het programma eerst door een zgn. compiler omgezet in de enen en nullen, waardoor er een uitvoerbaar bestand (executable) van gemaakt wordt. Die executable kan dan gestart worden.

Het zal duidelijk zijn, dat over het algemeen gecompileerde programma's sneller zullen zijn dan geïnterpreteerde, doordat de vertaalslag al van tevoren gemaakt is.
De programma's, waar we het in dit artikel over hebben zijn o.h.a. geschreven in C of C++. De meeste daarvan kunnen niet zomaar gecompileerd worden, omdat ze gebruik maken van functies, die niet behoren tot de standaard C of C++ taal, maar staan beschreven in zgn. libraries. Die libraries moeten dan ook betrokken worden bij het compilatie-proces. Dat laatste noemt men "linken", en dat is een stap, die dus vóór het eigenlijke compileren gedaan moet worden. Gelukkig hoeven we daar weinig van te weten, omdat dat allemaal voor ons geregeld wordt. Het wordt nu echter wèl duidelijk waar die libraries voor dienen en waarom veel programma's er niet zonder kunnen.

Voorwaarden

Voor het compileren van software is het noodzakelijk, dat het Linux systeem aan een aantal eisen voldoet. De belangrijkste daarvan is, dat de compiler-pakketten geïnstalleerd moeten zijn. Zoek maar eens naar pakketten, waarin de tekst "gcc" of "cpp" voorkomt:

     rpm -qa | grep gcc

Ook moet het pakket "make" beschikbaar zijn.
Dit zijn nog maar de minimum-eisen. Afhankelijk van het te installeren programma kunnen nog wel meer eisen gesteld worden, zoals de aanwezigheid van perl en/of python, enz.
Bij sommige distributies (o.a. Mandrake) kun je bij de installatie ervan aangeven of je de "ontwikkelingsgereedschappen" of "development-tools" wilt installeren. Als je ooit misschien mogelijk van plan zou kunnen zijn software te gaan compileren, moet je hier zeker voor kiezen.

Downloaden en uitpakken

We gaan je niet vertellen waar je de beste software kunt vinden, daar bestaan tenslotte zoekmachines voor. Toch willen we je nog wel even wijzen op het bestaan van sourceforge: de grootste verzameling van Open Source Software. Daar staan meer dan 70.000 projecten geregistreerd, van simpele spelletjes tot ingewikkelde wetenschappelijke software.
Tevens willen we je adviseren om voor alle broncode een speciale map in je home-directory aan te maken; dat houdt de zaak overzichtelijk. Noem die map bv. "source".
Het is gebruikelijk, dat de broncode van een programma als één bestand wordt aangeboden, meestal in .tar.gz of .tgz formaat, maar soms ook wel als .tar.bz2 bestand.
De .gz of .bz2 extentie heeft betrekking op de manier waarop het bestand gecomprimeerd is: .gz-bestanden zijn gecomprimeerd met gzip; .bz2 bestanden met het nieuwere bzip2, wat de bestanden nog iets kleiner kan maken dan gzip.
De letters tar staan voor "tape archiver"; het is, kort en simpel gezegd, een methode om meerdere bestanden in één bestand in te pakken en oorspronkelijk bedoeld als back-up programma.
Het geheel van tar met een compressie-programma is te vergelijken met wat het programma Winzip doet onder het concurrende besturingssysteem.

Na het downloaden zal het dus eerst gedecomprimeerd en uitgepakt moeten worden. Dat kan met een enkele opdracht:

     tar -xzvf programma.tar.gz

of:

     tar -xjvf programma.tar.bz2

Er wordt dan een nieuwe directorie gemaakt met de naam (en versie-nummer) van het programma. In die directorie vind je allerlei bestanden en subdirectories.

Configureren

Nu moeten we naar die nieuwe directorie gaan (cd programma). Naast de broncode-bestanden is daar ook bijna altijd de nodige documentatie in de vorm van een README of INSTALL bestand te vinden. Lees dit bestand cq. deze bestanden goed door: we gaan in dit artikel uit van de meest gebruikelijke procedure voor het compileren van software, maar er zijn uitzonderingen. En dat is te lezen in die documentatie!
Gewoonlijk (maar dus niet altijd...) kan de installatie nu geconfigureerd worden door het draaien van het (ook in die directorie aanwezige) configure-script. Het kan uitgevoerd worden met de opdracht

     ./configure

Met het draaien van dit script wordt er nog niets gecompileerd. Configure controleert alleen of alles wat nodig is om het programma te compileren echt aanwezig is op je computer (zoals de juiste libraries en gereedschappen) en bereid de compilatie voor. Als er iets mist, zal het configure-script dat duidelijk maken d.m.v. een foutmelding.

Configureren voor gevorderden

Het configure-script is meestal geschreven om te komen tot een standaard installatie. Vaak is met het script echter nog veel meer mogelijk: de configuratie is aanpasbaar. De mate waarin dit het geval is verschilt per programma. De aanpassingen worden aan het script doorgegeven d.m.v. parameters. De verschillende parameters en hun betekenis zijn meestal opvraagbaar met de parameter --help:

     ./configure --help

Het even bekijken van de mogelijkheden is leuk en leerzaam, maar het spelen ermee is iets, waar we een beginner niet toe willen aanzetten!

Make

Het laatste wat het configure-script doet is het maken van een zgn. Makefile. Dat is een bestand (inderdaad: met de naam Makefile), dat als invoer zal dienen voor het programma make.
Make zorgt, samen met Makefile, dat de bronbestanden gecompileerd worden. Dit doen we, nog steeds vanuit de programma-directorie (anders kan make z'n Makefile niet vinden), door de opdracht:

     make

Nu wordt het programma gecompileerd, maar nog niet geïnstalleerd. Alle bestanden staan nog ergens onder de programma-directorie. Het op de juiste plaats zetten van die bestanden doen we straks. Het compileren kan bij grotere programma's wel enige tijd duren, zeker op een wat langzamere computer.

Make voor gevorderden

In Makefile is (voor gevorderden!) ook nog wel wat te spitten. Makefile is een "gewoon" tekstbestand en kan dus bewerkt worden (bv. met vi of met kwrite). Zo is het mogelijk de optimalisatie voor een bepaald processortype hier aan te geven (o.a. d.m.v. de zgn. CFLAGS en CXXFLAGS). Voor de liefhebber is daar meer over te vinden in de info-bestanden van make (info make).

Installeren

Na het compilatie-proces (gestuurd door make) is het tijd om alles op z'n plaats te gaan zetten. Dat wordt gedaan door

     make install

Let wel: de stappen tot en met make kunnen (meestal) gedaan worden door een "gewone" gebruiker, de installatie moet gedaan worden door "root"!
Na deze stap is het programma geïnstalleerd. Nu is het nog een kwestie van het starten van het programma om te kijken of alles ook echt werkt (maar als je eenmaal zover gekomen bent, hoef je je daar niet echt meer ongerust over te maken...).

Opruimen

Het make-proces heeft nogal wat bestanden geproduceerd, die allemaal ergens in de source-directorie of een subdirectorie daarvan zijn blijven staan (de opdracht make install copiëert ze naar de juiste directories). Om dat op te ruimen is een simpele opdracht voldoende:

     make clean

Zorg er wel voor, dat de Makefile niet gewist wordt, want die is nodig voor het eventueel de-installeren van het programma.

De-installeren

Als het geïnstalleerde programma toch niet erg bevalt, kan het ook weer verwijderd worden, hoewel iets minder eenvoudig als bv. met rpm. Je kunt het in eerste instantie proberen met:

     make uninstall

Als dat niet werkt, dan zal de software met de hand verwijderd moeten worden. Als bekend is waar het geïnstalleerd is, kunnen de bestanden gewoon gewist worden. Zo niet, dan kan gekeken worden in de Makefile. Daar is terug te vinden waar de verschillende bestanden neergezet zijn.

Literatuur

Op onderstaande websites is meer en diepergaande informatie te vinden over dit onderwerp (om van een beginner een gevorderde te maken...):


Laatst herzien op 18-12-2006