Punto informatico Network
Canali
20091011195959_536691528_20091011195943_1980265020_sl_open.png

Cenni generali sulla compilazione in GNU/Linux

21/05/2010
- A cura di
Linux & Open Source - Probabilmente saper "compilare" qualcosa in sistemi operativi derivanti da UNIX è una delle basi a cui riferirsi per ottenere una vera e propria "raffinazione" e customizzazione dei software installati nel sistema.

Tag

Passa qui con il mouse e visualizza le istruzioni per utilizzare i tag!

compilazione (1) .

Valutazione

  •  
Voto complessivo 4 calcolato su 25 voti

Note

[1]: Un linguaggio portabile è un tipo di linguaggio di programmazione che può essere compilato per una qualsiasi architettura per cui esista il compilatore relativo, con poche o nessuna modifica.

[2]: L'architettura hardware (o "architettura") è la struttura fisica di una CPU, comprendente il set di istruzioni, che ne caratterizza il funzionamento e la gestione delle istruzioni macchina.

[3]: Esistono anche le "ottimizzazioni generiche", che sono metodi di compilazione che renda compatibile un programma con processori diversi, seppur della stessa famiglia come x86, che comprende AMD e Intel. Il loro set di istruzioni non è identico, e tra loro differiscono per alcune istruzioni macchina caratteristiche.

[4]: Tra i primi, il compilatore per FORTRAN nel 1957 ad opera di IBM, usato ancora oggi, e quello per COBOL nel 1960.

[5]: Alcuni compilatori usano uno "stadio zero", chiamato ricostruzione di linea, che serve a correggere i separatori (spazio, tab, newline) in separatori "standard", quando ad esempio vengano usati molti spazi per rappresentarne uno solo.

[6]: Gli "header" sono file particolari che contengono funzioni o definizioni altrimenti non incluse nel codice sorgente appena scritto, e che possono essere riutilizzati più volte da molti file. Durante il preprocessing l'intero contenuto degli header viene copiato all'interno del file sorgente in cui sono dichiarati.

[7]: Differenze tra preprocessing e linking

Probabilmente vi starete chiedendo "Ma il preprocessing e il linking sono la stessa cosa? "

La risposta è no. Il preprocessing sostituisce dei riferimenti a header (prendendo come esempio il linguaggio C) con l'intero contenuti dell'header, nello stesso linguaggio, pronto per essere compilato.

Il linking, invece, rende disponibili le funzioni utilizzate nel codice sorgente, memorizzate in librerie precompilate (i file *.so in Linux e le famose *.dll in Windows) i cui contenuti sono condivisi ed accessibili ai programmi che ne fanno richiesta.

Inoltre nel preprocessing è facile capire che le istruzioni degli header vengono incorporate direttamente nell'eseguibile finale, e ne occuperanno lo stesso spazio in memoria; viceversa, per applicazioni collegate dinamicamente, il linker carica le librerie solo quando servono, e occupano porzioni di memoria separate dal codice del programma compilato.

[7a]: In linguaggi come il C ci possono essere fasi ulteriori, come il linking al termine dell'assembling, che collega le funzioni richiamate dal programma con le librerie condivise installate nel sistema. Ecco perché ogni tanto, quando installate un software da un reopsitory Ubuntu, non vi installa solo quel software, ma anche un insieme di librerie che contengono delle funzioni senza le quali il programma non può girare.

[8]: Le opzioni abilitate o disabilitate da riga di comando prevalgono sulle funzioni o librerie sondate.

[9]: In alcuni casi forzare un'opzione quando non ne esista la libreria nel sistema equivale a far fallire la configurazione. Vedere Troubleshooting.

[10]: Per rimediare a quest'ultimo problema basta rimuovere le opzioni forzate, o installare le librerie o i file di funzione rispettivi. Vedere Troubleshooting.

[11]: Generalmente è una buona idea evocare ./configure senza alcuna opzione per fargli sondare il sistema senza influenzarlo. Aggiungete le opzioni solo se sapete a che cosa vi servono e che cosa state facendo.

[12]: In fase di configurazione è possibile modificare i valori di alcuni parametri fornendoli all'inizio della riga di comando. Tali parametri verranno poi presi da configure e aggiunti ai valori di default nei Makefile. Fate riferimento all'appendice Parametri aggiuntivi per ulteriori informazioni.

[13]: Le locazioni di default, come quasi tutte le altre locazioni, compresi i percorsi di installazione dei file di configurazione (/etc) e delle librerie (/lib) sono modificabili in fase di configurazione, ma nel caso di piccoli software come yasm questi aspetti sono irrilevanti.

[14]: Esistono poi delle tipologie di errore di compilazione e che possono dipendere solamente dal compilatore, ma sono generalmente molto rare, e se possono risolvere aggiornando il compilatore o le librerie di sistema, il che solitamente corrisponde a fare un aggiornamento dell'intero sistema operativo. Possono anche capitare quando vi sia un divario di versione eccessivo tra il software da compilare ed il compilatore, come nel caso in cui si tenti di compilare un software del 2010 con una versione di gcc del 2005, o viceversa.

[15]: L'errore di assenza di file potrebbe derivare anche dal fatto che le librerie sono state installate nel posto sbagliato; di conseguenza il processo di compilazione non riesce a localizzare i file necessari nelle cartelle di default. Per ovviare a questo problema può venirvi in aiuto l'appendice Parametri aggiuntivi, oppure reinstallare le librerie al posto giusto. Ciò vale anche per la configurazione.

[16]: Le righe di comando qui esposte potranno cambiare di progetto in progetto, e le invocazioni corrette sono documentate nei siti ufficiali dei software che volete compilare.

[17]: Molte volte i progetti scaricati tramite SCM non hanno script configure, ed è necessario partire dalla configurazione automatica con autoconf, come descritto in questa pagina.

[18]: Per reperire uno degli SCM potete invocare le seguenti linee di apt-get, per Ubuntu o Debian:

sudo apt-get install subversion

sudo apt-get install cvs

sudo apt-get install git

[19]: I software scaricati via SCM vengono aggiornati più frequentemente di quelli scaricati via browser dai siti ufficiali, e mano a mano che il codice "cresce" potrebbero spuntare nuovi bug, o la compilazione potrebbe avere dei problemi. È importante che ricordiate che ogni nuova funzionalità è da considerare sperimentale fino a che gli sviluppatori non dicono il contrario.

[20]: Gli aggiornamenti via SCM non vengono incorporati nelle tarball o nelle nuove versioni rilasciate finchè gli sviluppatori non le giudicano stabili ed adatte all'utilizzo quotidiano.

[21]: Quando possibile, usate sempre le tarball scaricate via browser sul sito ufficiale degli sviluppatori, anziché un controllo di versione. Usate gli SCM solo se sapete quello che fate, o se volete controllare che una versione SCM sia stata corretta da un eventuale bug presente nell'ultima versione ufficiale, o se cercate una funzionalità che ancora non è presente nella versione ufficiale.

[22]: Non è un buon script perché così rimuove la stringa intera, dovunque sia sul percorso e nel nome del file, anche se non è parte dell'estensione. Per fare un buon lavoro bisogna usare dirname abbinato a basename per estrarre il nome senza suffisso o percorso.

Così facendo vengono estratti solo i suffissi, senza pericolo che sed cancelli stringhe dove non ne deve cancellare.

[22a]: Se volete partire direttamente dalla patch compressa e e l'archivio è gzip potete usare questo comando:

patch -Np1 < zcat file

Oppure

patch -Np1 < gzip -cd file

[23]: make clean e make distclean non riportano l'albero dei sorgenti come prima dell'applicazione delle patch. Se volete eliminare le modifiche fatte con patch dovete prima fare un backup dei sorgenti modificati e poi usare uno degli script riportati.

[24]: less è un tipo di software chiamato pager. Usate le frecce o PgUp e PgDown per navigare nel testo paginato, usate Q o Ctrl+C per uscire da less.

Iscriviti gratuitamente alla newsletter, e ti segnaleremo settimanalmente tutti i nuovi contenuti pubblicati su MegaLab.it!
Pagina precedente
Appendice 5: Parametri aggiuntivi

 

Segnala ad un amico

Tuo nome Tuo indirizzo e-mail (opzionale)
Invia a:
    Aggiungi indirizzo email
    Testo

    © Copyright 2025 BlazeMedia srl - P. IVA 14742231005

    • Gen. pagina: 0.3 sec.
    •  | Utenti conn.: 100
    •  | Revisione 2.0.1
    •  | Numero query: 45
    •  | Tempo totale query: 0.09