Content:

.  Index
.  FAQ
.  Slack Packages
.  Slack Install
. 
Slack Config
.  Slack Tutorial


.  Slack Security
.  Distribuzioni
.  Compilazione
. 
Kernel Linux
.  Downloads
.  Links
. 
Contact


The Slack-it Linux Project

.  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.
 

This site is maintained by velenux
(c) 2003 The Slack-it Linux Project