A.3. GNU programmerings værktøjer

GNU står for Gnu is Not Unix. Det skyldes, at man ikke må bruge navnet Unix uden at betale for det, det var et registreret varemærke i 80'erne, da Richard M. Stallman begyndte arbejdet med open source tools.

Heldigvis er Unix i vore dage ikke mere et varemærke, men en betegnelse for et operativ system, som overholder standarder. Se www.opengroup.org

De vigtigste værktøjer er: Compileren, gcc, assembleren as eller gas, linkeren ld, og object librarian ar. Med disse programmer kan man bygge en programfil.

Til at inspicere indholdet af programfiler og objektfiler, også kaldet dot-o filer, kan man benytte objdump. Det kan også disassemblere maskininstruktioner i objektmoduler.

Desuden er der den Gnu debuggeren, gdb. Der er adskillige klikbare interfaces til gnu-værktøjerne. Begynd med xxgdb og fortsæt med gide, Gnome Integrated Development Interface, og slut med de store, forkromede værktøjer sourcenavigator og kdevelop, alle sammen meget udmærkede, men tidrøvende. Skal jeg fremhæve nogen på andres bekostning må jeg indrømme, at indpakning og configure, make og make install af source navigator har imponeret mig. Det fungerede for mig på 2 (forskellige) RedHat platforme uden problemer.

Ud over klik-interfaces har man specielt meget glæde af indent, et program, som kan foretage formatering af en C kildetekst. Det er desværre ikke i stand til at håndtere alle syntakskonstruktioner på lige god måde, men har man en større mængde filer, som skal gennemarbejdes, er indent meget nyttigt. Kan man ikke lide de tabulatortegn, der er i en fil, kan man fjerne dem (anbefales!) med expand .

Indent og expand og mange andre programmer kan med fordel køres som filtre på den tekst - eller dele af den tekst - som man har i editoren. Dette tillader vi og vist nok også Gnu Emacs. Se i øvrigt Friheden til at vælge applikationer.

Nævnes skal også gvim , den forbedrede editor, vi-improved, som med sit system-interface, hjælpesystem, syntaksfremhævning, muse-interface og ortogonale kommandostruktur ender med at være mange programmørers favoriteditor. Der er dog flere, som benytter Gnu Emacs, Richard Stallmans bud på, hvordan en editor skal konstrueres. Den har features, som gvim ikke har, først og fremmest sammenligning og opdatering af to næsten ens filer. Man kan nemt finde kommandoerne til Emacs i menusystemet, og farver m.v. kan sættes (ligesom for andre programmer) i $HOME/.Xdefaults. Jeg nævner det her, fordi den RedHat valgte farve kombination ser frygtelig dyster ud. Begge editorer har en tutorial, som guider begynderen igennem de vigtigste operationer.

Dette afsnit er lige nu meget kort og ikke færdigt! De vigtigste options til GNU-C compileren er:

A.3.1. GNU C Compiler options

 
-c              compile kun, skriver en <navn>.o fil (dot-o fil, .o)
-d              output list af define, forudsætter -E
-g              inkluder debug information i resultat fil
-pedantic       check code after ANSI C code check spec-s.
-save-temps     save intermediate files, ufn.i ufn.s (hvorfor ikke ufn.o?)
-o xxx          send output til fil ved navn xxx. Hvis xxx ender
                   på .o, vil compileren *kun* gå til det step,
                   der generer .o filer.

-s              strip efter linkage 
-v              verbose, vis kommandoer fra gcc "administrator" program.

-I xxxx         path til ekstra include directory, vil blive søgt først.
-I-             Path(s) specificeret før denne option søges kun
                for "xxx" files i double quotes. Der er meget mere om
                -I option(s) in cpp.1 and cpp.doc

-E              send preproces output til ?
-MM             skriv MAKE regler for hvordan program er opbygget, bevirker,
                   at også -E switchen bliver sat.
-N? stack_check?

-O              Optimer. Skriver bedre kode, men pas på, kan ændre sekvens.
-P              Præproces uden linjer m/# info
-C              Lad kommentarer komme med
-trigraphs      Process ANSI standard trigraph sequences

-D"str"         Definér macro eller hvad du nu vil definere.
-u"str"         AF-definer en macro! (d.v.s. annuller virkningen
                   af en #define)



A.3.2. objdump eksempler

Her kommer eksempler på objdump anvendelse.