Compilazione
|
Compilare
programmi in Linux
|
Siete nuovi in ambiente linux
e volete lasciarvici coinvolgere? La maggior parte di voi, me compreso,
non sono programmatori, ma cio' non significa che non possiamo godere
dei benefici dell'open source, e magari contriburirne anche alla causa.
Significa anche che ci troviamo in netto svantaggio quando, compilando,
qualcosa va storto. Compilare e' veramente semplice: nulla di cui
preoccuparsi e certo non difficile come programmare, ma non e' detto
che abbia un esito garantito al 100%. Cio' che segue e' una guida alla
compilazione per il principiante. Dovrebbe dare il 90% delle soluzioni
alle persone che vogliono cominciare con Linux. Prima o poi, succedera'
a tutti di fare il downlaod di un programma in codice sorgente e
provare a compilarlo. Anche se siete fanatici di Red Hat o Debian,
potete sempre trovare un programma che e' o troppo vecchio o troppo
nuovo per trovare un precompilato binario. La cattiva notizia e' che il
codice non sempre si compila, indipendentemente dal vostro operato -
ricordate, la maggior parte dei programmi in linux, sono in beta al
massimo. La buona notizia e' che la percentuale dei programmi che si
compilano senza problemi e' aumentata in maniera piu' che significativa
negli ultimi cinque anni, e ci sono sempre interventi che si possono
fare per correggere il codice che non si compila, senza necessariamente
essere un programmatore.
Dopo aver fatto un download: ora ci si dovrebbe trovare una specie di
tar file compresso sul proprio disco. Prima occorre scompattarlo e poi
dare il comando tar per estrarlo (tar xf ... - ndr) in una directory.
Per convenzione, molti estragono i loro programmi nella directory:
/usr/src. Cio' serve a tenere tutto in solo posto cosi' si puo' pulire
in un secondo tempo, ed anche a tener traccia di quale versione del
programma si ha compilato. Bisogna essere root per usare questa
directory. Il programma 'tar' di linux, puo' scompattare ed estrarre il
file al tempo stesso, se il file e' stato compresso usando gzip. Se si
ha un file con il nome: filename.tar.gz, ci si puo' spostare nella
directory /usr/src e digitare:
tar -xzvf /{directory del
file}/{filename.tar.gz} [Enter]
ed il file sara' scompattato ed estratto. Segue una breve spiegazione
dei flag:
x - untar the file (estrae il file)
z - uncompress the file (scompatta il file)
v - verbose - cosi' puoi osservare cosa succede
f - cio' che segue e il nome del file che vuoi estrarre
Se si usa Netscape per fare il download del file, si potrebbe avere un
errore. A volte Netscape cerchera' di scompattare il file al vostro
posto. Cosi' se cercherete poi di scompattare il file con il comando
citato sopra, potrete vedere:
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error exit delayed from previous errors
In questo caso, usate lo stesso comando, ma escludendo la z. Cosi', il
comando sara':
tar -xvf /{percorso del
file}/{filename.tar.gz} [Enter]
Al posto di gzip, molti files stanno usando bzip2 per la compressione,
quindi il file apparira' cosi: programma.tar.bz2. Il flag z con il tar,
in questo caso non funzionera'. Per estrarre il file nel modo piu'
semplice, occorre digitare: bunzip2 programma.tar.bz2. Questo generera'
il file: programma.tar, che si puo' estrarre usando:
tar -xvf /{directory del
file}/programma.tar [Enter]
Dopo aver estratto: spostarsi nella directory che e' stata creata
quando e' stato estratto con 'tar x..' il file. Guardare nella
directory con 'ls'. Dovrebbero esserci i file README ed INSTALL. Non si
pensi di avere un briciolo di aiuto da qualcuno se non si prende
visione di questi files. Questa e' la ragione per cui RTFM (*) e' una
delle espressioni piu' comuni della Rete (RTFM = Read The Fucking
Manual, ovvero "Leggiti quel Fottuto Manuale", tipica risposta che
viene data quando si fa un quesito la cui risposta e' notoriamente
contenuta nella documentazione allegata - N.d.r). I file README e
INSTALL dovrebbero spiegare come compilare ed installare il programma.
Per compilare, impartire il comando "make". Per poter lanciare "make"
per compilare, occorre avere un file chiamato: Makefile (si potrebbe
lanciare il "make" con delle opzioni particolari dalla linea comandi,
ma questo esula dalla competenza di questo articolo).
Ci sono tre modi generali per compilare: metodo semplice, Imake e
configure.
Metodo semplice: Se vedete un file chiamato Makefile - nessun file
"configure" o "Imake", occore usare questo metodo. Questo metodo di
compilazione e' quello che generalmente puo' creare piu' problemi,
poiche' nulla e' configurato sul computer. Spesso i file README e
INSTALL dicono come editare/modificare i files onde poter compilare con
successo. Generalmente occorre digitare:
make [Enter]
make install [Enter]
e se tutto va a buon fine, si puo' lanciare il programma.
Imake: Se facendo ls nella directory, si nota un file Imake e nessun
Makefile, occorre usare questo metodo. Questa e' una vecchia maniera
per preparare la compilazione. Praticamente si digita:
xmkmf [Enter]
make [Enter]
make install [Enter]
Configure: Usare questo metodo di compilazione se esiste un file
"configure" nella directory. Questo e' il metodo piu' facile per
compilare e probabilmente e' quello che ha la piu' alta probabilita' di
compilare correttamente. Essenzialmente, viene controllato l'intero
sistema e l'esistenza di ogni libreria possibile e tutti i file di
supporto necessari per assicurarsi che si possa compilare il programma,
quindi viene creato il Makefile con le informazioni corrette. Per
compilare, quindi, occorre digitare:
./configure [Enter]
make [Enter]
make install [Enter]
Notare il ./ di fronte al primo comando. Quando si digita un comando,
la shell cerca il file nella vostra path, ma NON COMINCIA a cercare
dalla directory corrente (a meno che nella variabile di ambiente PATH
non sia specificato "." come prima directory di ricerca - n.d.r.),
quindi se ./ (che significa: la directory corrente) non e' nella path,
nonostante che il comando ls possa vedere il file, la shell non e' in
grado di farlo. La shell puo' eseguire il make perche' questo e'
generalmente presente sotto /usr/bin, che e' compreso nella path. Per
vedere il contenuto della path, digitare:
echo $PATH [Enter]
La causa piu' comune di una compilazione fallita, e' la mancanza di uno
o piu' files. sQuasi tutti i programmi, fanno affidamento al supporto
di programmi/files/librerie. Se questi mancano, il programma non puo'
essere compilato. I file README/INSTALL potrebbero specificare quali
files, e quali versioni occorrono per compilare il programma. Nota: la
versione sbagliata, puo' causare il fallimento dell'operazione cosi'
come l'assenza di questo. Generalmente si viene a conoscenza di questo
problema poiche' la segnalazione di errore alla fine della procedura di
compilazione dira' che non puo' trovare un dato file. Nota: a volte il
file puo' effettivamente esistere, ma potrebbe non essere dove il
Makefile vuole trovarlo. E' opportuno usare il programma di
installazione della propria distribuzione di linux, per es., rpm, e
controllare che esista il file reputato mancante. Se non c'e',
procurarselo. Se invece esiste ed e' della versione corretta, controlla
il Makefile per vedere dove crede che il file si trovi. Esempio:
diciamo che il file moc e' in /usr/local/bin, ma nel Makefile e'
specificato: moc=/opt/bin/moc. Quindi, occorre editare il Makefile (con
il vi o qualsiasi altro editor di testi) e cambiare la locazione del
comando moc.
Il successivo problema piu' comune e' la mancanza dei file di include.
La maggior parte dei file sorgente del programma compresi nella
directory hanno delle linee iniziali che appaiono piu' o meno cosi':
#include <gtk/gtk.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
Questi file ".h" (chiamati header files) devono esistere nel computer.
Per lo meno, occorre controllare che esistano i file header, digitando:
ls /usr/include/linux. Se si hanno delle librerie insallate, come gtk,
occorre assicurarsi che vi siano installati pure i file di sviluppo di
queste. A volte, avere versioni multiple della stessa libreria puo'
causare problemi, in quanto ogni versione potrebbe piazzare i propri
header files in posti diversi e quindi non si potrebbe essere in grado
di sapere quali files il compilatore usera'.
Se avete fatto tutte le modifiche necessarie al Makefile(s) ed avrete
tutte le librerie ed i files include al loro posto ed ancora non si
compila, fate le seguenti cose NELL'ORDINE:
1. Se avete scaricato il
programma da un sito diverso dal sito principale di questo programma,
andate nel sito principale e guardate se c'e' una nuova versione
disponibile.
2. Andate al sito
http://www.dejanews.com/ e cercate il vostro programma. E' molto
probabile che altri abbiano avuto lo stesso problema ed abbiano
pubblicato una soluzione.
3. Se anche tutti questi
falliscono, scrivete una e-mail all'autore. Molti autori di programmi
sono interessatissimi a migliorare i loro programmi, e segnalazioni di
anomalie/consigli di miglioramento sono generalmente sempre graditi
(ricorda: questo e' linux, non software commerciale.) Nota: fareste
meglio a rendere le vostre segnalazioni di errore piu' esaurienti
possibile, e NON dire semplicemenete "non compila"! Io generalmente
posto le ultime 10 linee, o qualcosa del genere, della finestra xterm
di compilazione da quando si e' verificato l'errore, cosi' l'autore
puo' capire esattamente cosa e' accaduto. Se il programma mi piace
veramente, scrivero' all'autore dopo ogni nuova versione in modo da
fornigli/fornirle la maggior parte di riscontri/resoconti possibili. Vi
prego di notare: I programmatori sono umani, quindi anch'essi prendono due settimane di ferie,
cambiano lavori, cambiano casa, citta', ed alcuni vanno regolarmente a
lezione scolastica, quindi cerchiamo di non prentendere ne' tantomeno
aspettarci una risposta immediata.
Concludendo, ci sono alcuni programmi che hanno un unico tipo di
configurazione per la compilazione: le librerie qt ed il kernel, sono
le prime cose che mi vengono in mente. Per compilare questi, insistero'
ancora un ultima volta: si leggano i file README ed INSTALL.