DJGPP QuickSetup Guide

 

Indirizzo e-mail dell'autore: avly@castle.net
HomePage dell'autore: http://www.castle.net/~avly/djgpp.html
Traduzione: MrCODE (mrcode@tiscalinet.it)
HomePage Traduttore: http://web.tiscalinet.it/mrcode

DJGPP è un sistema di sviluppo a 32bit per PC ed è molto potente. Esso include i DOS port di molte utilità GNU .
Il sito principale è
Delorie Software  dove trovare le informazioni più aggiornate, incluse avvisi, bug fixes, FAQ lists, contributi software , e altro.

INIZIARE CON DJGPP

Se sei un novizio del DJGPP, ti suggerisco di imparare qualcosa in più circa tale ambiente prima di scaricare il package da internet. Prima cosa da fare e procurarsi le FAQ lists faq102.zip e faq211b.zip, e leggersele accuratamente. Le sezioni da 1 a 3 delle FAQ sono focalizzate su tips che ti aiuteranno ad iniziare. Le versioni correnti del DJGPP sono la v1.12 e la v2.02 (in questo documento citate rispettivamente come v1 e v2). Raccomando caldamente la v2 piuttosto che la v1, che ha molti vantaggi come ad esempio una migliore compatibilità ANSI ed altro.

INSTALLARE I PACCHETTI

Procurati la documentazione e leggila.La documentazione Online per il DJGPP è nei file txi*.zip; in più, ogni utility (compilatore, assemblatore, etc.) ha la sua documentazione separata. Le due versioni del sistema hanno leggere differenze nel setup. Scompattare tutti i packages tramite pkunzip -d file.zip oppure unzip file.zip. I pacchetto di mantenimento devono essere installati come ultimi ed in ordine: m1, m2,... Per installare un pacchetto di mantenimento, scompattarlo ed eseguire il file batch di installazione contenuto, dopo continuare con il prossimo pacchetto. C'è anche un pacchetto minimale del DJGPP, descritto nella lista delle FAQ. La versione di EZ-GCC compressa è circa 5Mb. Notare che appartiene alla distribuzione DJGPP v1.1x!  Ancora una volta vi consiglio di procuravi la versione v2.

COSTRUIRE IL VOSTRO PRIMO PROGRAMMA DJGPP

Per coloro che sanno già usare il gcc, semplicemente smettete di leggere ed usatelo. Ricordatevi che DJGPP è il gcc per DOS. Per coloro che sono novizi del gcc e/o compilatori a linea di comando in generale, ecco di seguito una piccola guida per compilare, eseguire, debuggare e fare il profiling dei vostri programmi.

BUILDING

Io uso il termine compilare per descrivere il trasformare codice sorgente in codice oggetto, linkare per trasformare i file in codice oggetto in un formato eseguibile, e build per compilazione e successivo linking.

Per eseguire il build dei files basta digitare: gcc -o [output] [input...].

Usando la v1 verrà generato un binario di tipo COFF, mentre con la v2 un file eseguibile.

Per eseguire un programma in v1 digitare go32 output  per caricarlo nel DOS extender go32 ed eseguirlo. Nella v2, digitare il nome del programma per eseguirlo. Il file binario COFF prodotto dalla v1 può essere convertito in un programma eseguibile eseguendo il comando coff2exe output. Per la v2, assicuratevi di girare in DOS sotto un DPMI server (QEMM, Windows, OS/2, etc.), oppure che cwsdpmi.exe (da csdpmi*.zip) sia nella directory corrente o nel path di sistema.

Di seguito alcuni esempi:

Compilare un programma in codice oggetto:

gcc -c hello.c

Fare il Build di un programma il cui codice sorgente è contenuto in un singolo file:

[v1] gcc -o hello hello.c

[v2] gcc -o hello.exe hello.c

Per eseguire il programma, digitare go32 hello se in v1, oppure hello.exe se in v2.

Fare il Build di un programma contenuto in più di un file sorgente:

gcc -o [output] [input1.c input2.c...]

I files sorgente possono avere estensione .c, .cc, .cpp, .S, etc. Vedi la documentazione per maggiori informazioni su come il gcc gestisce ogni estensione di file per default.

Le Librerie possono essere linkate usando lo switch -l . Dovrebbero sempre essere inserite come ultima direttiva sulla linea di comando.

La libreria Standard C , libc.a, è linkata in automatico così non avrete bisogno di specificarla esplicitamente. Così per la maggior parte delle volte non dovrete specificare il parametro -llib . Se volete linkare la libreria GNU C++ , usate -lgpp; per il subset di streams della libreria GNU C++ , usate -liostream; per le funzioni matematiche standard, usate -lm; per le funzioni specifiche del PC come le chiamate fornite dal BIOS fornite dal DJGPP, usate -lpc. Notare che  -lpc non è più necessario a partire dalla v2.

Se avete la necessità di linkare librerie multiple, ricordatevi che l'ordine corretto è: -lall_other_libs_first -lgpp -lm -lpc.

Alcuni esempi in più:

Le Librerie devono essere specificate da ultimo sulla linea di comando:

gcc -o [output] [input] [-llib1 -llib2 -llib3...]

Link di una libreria standard. Supponete di usare il codice di iostream del C++ nel vostro programma hello.cpp :

[v2] gcc -o hello.exe hello.cpp -liostream

Date uno sguardo all'interno della directory djgpp\lib . Il file corrispondente a -liostream è libiostream.a (o libiostr.a a causa del formato 8.3 dei nomi nella FAT). La libreria standard C, contenuta in djgpp\lib\libc.a, può essere linkata esplicitamente usando -lc. Vedete una corrispondenza? In generale, libX.a in djgpp\lib corrisponde a -lX sulla linea di comando.Per favore fate riferimento alla documentazione per maggiori informazioni sulle varie librerie standard che sono a disposizione del DJGPP.

Ancora, la libreria standard C è automaticamente linkata dal gcc così -lc non è necessario.

Link di librerie multiple:

gcc -o [output] [input] [-lmylib2 -lmylib2] -lgpp -lpc

Una cosa molto importante da ricordare è che il comportamento del DJGPP,per librerie date in ordine differente sulla linea di comando, è imprevedibile. Ancora una volta, se state facendo il link con librerie multiple, il corretto ordine è -lall_other_libs -lgpp -lm -lpc.

Altre opzioni che potrebbero tornarvi utili sono -Wall per avere un report di tutti i warnings del compilatore, -On dove n è il livello di ottimizzazione richiesto, -g per generare informazioni di debug (necessarie per il debugging), etc.

Alcuni esempi:

Report di tutti i warnings:

gcc -Wall -o [output] [input]

Ottimizzazione dell'output con O1:

gcc -O1 -o [output] [input]

Ottimizzazione maggiore con O2:

gcc -O2 -o [output] [input]

Genera informazioni di debug all'interno dell'output:

gcc -g -o [output] [input]

Report di tutti i warnings, ottimizzazione, e generazione delle informazioni di debug:

gcc -Wall -O2 -g -o [output] [input]

In generale, non è necessario un ordine preciso sulla linea di comando per queste opzioni, (eccetto per i casi in cui l'opzioni necessita di un argomento successivo; per esempio l'opzione -o per l'output). Semplicemente ricordate che tutte le -llib vengono da ultimo, e seguono un ordine tra di loro.

Un esempio di linea di comando:

[v2] gcc -Wall -O2 -g -o hello.exe hello.c myobjfile.o myasmsrc.S -lacmelib -lgpp -lm

Questa  linea fa il build di hello.exe a partire da hello.c (sorgente C), myobjfile.o (un file oggetto precompilato), e myasmsrc.S (sorgente ASM). Esegue il link con la libreria utente libacmelib.a, la libreria standard libgpp.a (g++ library) e libm.a (libreria matematica). Tutti i warnings del compilatore sono abilitati (-Wall) e sono generate le informazioni di debug (-g) con l'ottimizzazione del file in uscita (-O2)  che sarà (-o hello.exe).

DEBUGGING

In v1, digitate go32 -d [debugger-name] [program] [program args...]. Se avete installato il debugger, il campo [debugger-name] sarà gdb. Ci sono altri debugger disponibili al sito Oak: notate anche che ci sono due versioni per ognuno, DPMI e non-DPMI, così usate quella corretta in base al vostro ambiente di programmazione. La Sezione 12 della lista dei FAQ spiega cose in più sul debugging dei programmi.

In v2, digitate gdb [program.out] [program args...]. Assicuratevi di aver fatto il build del vostro programma con l'opzione -g . Program.out non è l'eseguibile, ma bensì l'immagine binaria in formato COFF . Leggete la FAQ list e la documentazione gdb per maggiori informazioni.

C'è un'altro potente tool per debuggare i programmi "crashati" (v1 or v2) che produce un trace-back sullo schermo (messaggi GPF e dump dei registri). Assicuratevi che il programma sia stato generato con l'opzione -g , e che l'immagine COFF e i file sorgenti siano nella stessa directory. A questi punto digitate symify [program] subito dopo che il programma è andato in crash ed esso dovrebbe mostrarvi i numeri di linea del codice sorgente che hanno causato il crash

PROFILING

Per fare il profiling del vostro codice (v1 o v2), eseguite il build con l'opzione -pg , eseguite il vostro programma, quindi eseguite gprof [program.out]. Program.out dovrebbe essere l'immagine COFF , piuttosto che l'eseguibile. Notare che per la versione v1, gprof non lavora sotto DPMI. Leggere la FAQ list e la documentazione di gprof per maggiori informazioni.

MISCELLANEA

Se volete tesatre la corretta installazione del vostro sistema di sviluppo, potete procurarvi i file djtst*.zip dallo stesso posto in cui avete reperito il DJGPP. Eseguite il file batch ed esso effettuerà automaticamente la compilazione, il linking, e il testing.

La gente chiede se esistono degli ambienti integrati (IDE) per il DJGPP. E' stato portato sotto DOS l'ottimo GNU Emacs, vi consiglio di provarlo. Esistono anche alcuni editor avanzati; provate Aurora, Multi-Edit, oppure Boxer. C'è anche un IDE Borland-like per il DJGPP chiamata RHIDE. Un'altro front-end per DJGPP è DFE95 per Windows 95/98 o NT (5/27/99 - sembra che DFE non sia più supportato).

Alcuni piccoli trucchi:

Se il vostro primo programma non sembra voglia essere compilato, digitate set  al prompt del DOS per visualizzare le vostre variabili di ambiente, Guardate se le variabili del DJGPP sono propriamente settate, come qui descritto.

DJGPP
potrebbe andare in Out of virtual memory se eseguito in una shell DOS di OS/2. Clickate col destro per ottenere le proprietà della Shell DOS e incrementate la memoria DPMI. La mia è settata così: ENABLED a 32MB.

Redirezionare lo stdout non lavora bene sotto una DOS shell 'normale'. Provate ad usare delle shell meno ingombranti come ad esempio 4DOS. C'e' anche un'altra soluzione per i problemi della redirezione, usando il comando redir ;cercate nell'archivio delle mail.

DOVE TROVARE AIUTO

LEGGETE la FAQ list! Guardate se ciò di cui cercate è stato già argomento di discussione!

DJGPP dispone di una documentazione in linea; è nei pacchetti txi*.zip. Se la installate, digitate semplicemente info per entrare nel nodo principale dell'help, oppure info [topic...] per andare direttamente ad un argomento particolare. Usate i tasti Tab, barra spaziatrice, Return , n, p, u etc., per navigare tra le pagine e gli argomenti. Premete q per uscire.

C'è anche un newsgroup dedicato al DJGPP su Usenet, e un mailing list sul DJGPP (Penso che la posta sia la stessa del newsgroup, quindi non importa che sottoscriviate entrambe). Il newsgroup è comp.os.msdos.djgpp; per sottoscrivere la mailing list, inviate un messaggio a listserv@delorie.com, senza alcuni oggetto e scrivete add [your e-mail address] djgpp nel corpo del messaggio. Se volete solo l'intestazione dei messaggi, scrivete invece  add [your e-mail address] djgpp-announce.

Un'altro metodo per trovare informazioni è cercare nel mail-archives al Delorie Software. Lì troverete molti ottimi articoli.


Altri programmi e librerie per il DJGPP

Nel sito Simtel ci sono moltissimi programmi e contributi nella directory djgpp. Provate a navigare attraverso i vari siti simtelnet. L' index file mostra tutti i file seguiti da una breve descrizione.

La directory djgpp2 al sito Oulu contiene molte librerie, per la maggior parte per grafica e game programming, L' index file mostra tutti i file seguiti da una breve descrizione.

Molti ringraziamenti vanno a DJ Delorie, Eli Zaretskii, Charles Sandmann e al resto del DJGPP team!

July 28, 1999 - icbmX2 on EFNET IRC. Send e-mail for corrections or suggestions to avly@castle.net.

Standard Disclaimer: All trademarks mentioned are owned by their respective companies. There are absolutely no guarantees, expressed or implied, on anything that you find in this document. I cannot be held responsible for anything that results from the use or misuse of this document. 
Torna alla pagina principale

Torna alla main page! Torna alla pagina principale