PDA

Visualizza la versione completa : che vol dire "compilare" un programma?


The knight
23-01-2008, 19:26
Perchè bisogna compilare i programmi con linux ? Che cosa significa ? Che operazioni vengono svolte quando si "compila" un programma ? Grazie

RokStar
23-01-2008, 19:39
Come te lo spiego? Vediamo... un programma viene generalmente scritto in un linguaggio di programmazione, che è fatto per agevolare l'essere umano a scrivere qualcosa di comprensibile. Il computer invece ragiona in binario, per cui bisogna che ci sia una traduzione da linguaggio di programmazione a linguaggio macchina. Il compilatore è un programma che serve a fare questa traduzione.
A scanso di equivoci, i programmi .exe per windows sono programmi compilati, quindi non è una cosa esclusiva di linux, tutti i programmi utilizzabili sono compilati. Poi ci sono anche gli script, che sono comunque una sorta di programmazione, in cui c'è un interprete che li passa alla macchina al volo, ma hanno tempi maggiori di esecuzione rispetto ad un sorgente compilato.

hfish
23-01-2008, 19:44
normalmente un programma è scritto in un linguaggio comprensibile facilmente per l'uomo. la compilazione serve ad ottimizzare e tradurre quello che è stato scritto in linguaggio umano nel linguaggio dei processori. come già detto, gli EXE che sei abituato ad usare con windows sono programmi compilati, ergo la compilazione non è una caratteristica di linux

The knight
23-01-2008, 19:55
Originariamente inviato da hfish
normalmente un programma è scritto in un linguaggio comprensibile facilmente per l'uomo. la compilazione serve ad ottimizzare e tradurre quello che è stato scritto in linguaggio umano nel linguaggio dei processori. come già detto, gli EXE che sei abituato ad usare con windows sono programmi compilati, ergo la compilazione non è una caratteristica di linux

quindi il php come funziona ? Cioè il codice viene tradotto in binario prima di essere eseguito lato server ? E un programma su linux solitamente è scritto in C ? E dopo che faccio "make install" che diamine succede ?

paolino_delta_t
23-01-2008, 21:26
Originariamente inviato da The knight
quindi il php come funziona ? Cioè il codice viene tradotto in binario prima di essere eseguito lato server ? E un programma su linux solitamente è scritto in C ? E dopo che faccio "make install" che diamine succede ?

PHP fa parte di un'altra famiglia di software chiamati Interpreti....interpreti sono pure Perl, Python, Vbasic, Java, ecc...

mentre i compilatori traducono i sorgenti in binari e salvano questi ultimi in file, gli interpreti effettuano la conversione durante l'esecuzione del programma stesso, ma in pratica il processore eseguirà sempre e solo codice binario

i programmi Linux non sono solitamente scritti in C, anzi trovo che gli altri linguaggi siamo molto più usati, soprattutto Python, questo perchè il C/C++ sono linguaggi estremamente complessi il che rende il software difficile da scrivere e soprattutto rende complicato evitare bug

nel momento in cui fai "make" o "make all" stai richiamando un apposito programma, make appunto, che serve ad organizzare le fasi della compilazione di un programma....per esempio se ho un programma fatto di 4000 file C non posso stare a dare "gcc -o nome_eseguible nome_sorgente.c", allora creo un makefile che automatizza la compilazione e lo invoco attraverso il comando "make"

"make install" invece permette l'installazione dei file binari appena compilati, se non sono compilati procede prima alla compilazione e poi all'installazione....ovviamente "all", "install", "clean" e i vari altri parametri sono definiti come label all'interno del makefile, quindi per esempio io posso definire nel mio makefile un entry "pippo" che fa l'installazione e per installare darò "make pippo" invece di "make install"

The knight
23-01-2008, 21:57
Ti ringrazio per l'esauriente spiegazione, davvero una miniera di informazioni :unz:

Senti, ma se volessi sapere se ho installato corettamente un programma con "make install" come faccio ?

paolino_delta_t
23-01-2008, 22:04
Originariamente inviato da The knight
Ti ringrazio per l'esauriente spiegazione, davvero una miniera di informazioni :unz:

Senti, ma se volessi sapere se ho installato corettamente un programma con "make install" come faccio ?

beh devi vedere se è stato compilato correttamente e quindi c'è l'eseguibile e se è stato copiato nella directory dove dovrebbe stare, poi ovviamente a seconda del programma possono esserci file di dati, icone, ecc....

in sostanza fai prima a mandarlo in esecuzione e vedere se funziona :D

mykol
23-01-2008, 22:20
alle esaurienti spiegazioni che ti sono state fornite vorrei solo aggiungere che è ormai un'evenienza rara che un utente "debba" compilare programmi, in Linux.

Le distribuzioni linux sono fornite sotto forma di file .iso che scritti sul CD O DVD permettono di installare il sistema.

Ogni distribuzione dispone di "repository", cioè archivi di pacchetti compilati ospitati su appositi server.

Inoltre ogni distribuzione dispone di un "gestore di pacchetti" tramite il quale con pochi comandi o pochi click del mouse è possibile collegarsi ai server, scaricare il/i pacchetti ed installarli in modo automatico.

Ad esempio con mandriva è sufficiente aprire una console di root e dare il comando

urpmi nomepacchetto

per effettuare l'installazione, oppure usare la sua interfaccia grafica.

Quindi, la necessità di dover compilare pacchetti è ormai remota, a meno che non si abbia interesse/necessità di farlo per motivi particolari, oppure perchè sui server della propria distribuzione un particolare programma non sia disponibile già compilato, cosa che si verifica raramente e solo per programmi particolari.

In pratica, tra le principali distribuzioni, solo gentoo, va compilata in fase di installazione.

The knight
23-01-2008, 23:10
Ok, grazie a tutti :D

kove
24-01-2008, 18:27
mi sa che cmq per disinstallare da sorgenti devi fare make uninstall, ma non ne son sicuro al 100% ^^
Dalla directory del sorgente intendevo ^^

Loading