86 Octombrie 2004
Pagina începătoruluiLINUX USER
www.linux-magazin.ro
Linux pentru programatori
ProgramareaDacă nu aţi ştiut, Linuxul modern vă pune la dispoziţie o mulţime de
utilitare, atât pentru modul text cât şi cel grafic, pentru dezvoltarea,
configurarea şi creearea programelor scrise în diferite limbaje de
programare. DE DRAGOŞ ACOSTĂCHIOAIE
Linux este o platformă completă
pentru dezvoltarea de programe,
oferind o largă suită de instrumente
de programare, incluzând compilatoare,
depanatoare şi medii integrate de
dezvoltare. Deosebit de utilă este bogata
colecţie de biblioteci, care uşurează munca
programatorilor. Trebuie sa subliniem aici
şi avantajul indiscutabil al disponibilităţii
surselor programelor, permiţând astfel
formarea programatorilor începători (cum
ar fi elevi sau studenţi), care pot să citească
şi să utilizeze fără restricţii codul sursă. Ei
nu vor fi nevoiţi să “reinventeze roata”, ci pot
prelua porţiuni din codul care este deja scris
şi să le folosească pentru propriile nevoi.
Sub Linux, exista o pleiadă de limbaje
de programare ce pot fi utilizate - fie
ele compilate (cum ar fi C, C++), fie
interpretate (cum ar fi Perl, PHP, Python,
Tcl/Tk, Java, JavaScript).
Compilatorul GCCCele mai multe programe Linux şi GNU
sunt scrise în C sau C++.
Cel mai răspândit compilator din lumea
UNIX este GCC, implementare open source
realizată de Free Software Foundation.
Acesta este un compilator
extensibil, existând extensii pentru
C, C++, Objective-C, Pascal,
Fortran etc. Executabilele generate
de către acest compilator nu trebuie
neapărat să fie open source, chiar
dacă includ bibliotecile standard C
sau C++.
Un exemplu de apelare a
compilatorului GCC este:
$ gcc -o exemplu exemplu.c
care va genera, pentru un fişier-
sursă cu numele exemplu.c, un
executabil cu numele exemplu
(opţiunea -o stabileşte numele fişierului
executabil ce va fi creat).
Pentru a compila un program C++, vom
apela:
$ g++ -I/usr/include/ncurses �-lncurses -o exemplu exemplu.cc
Am folosit opţiunea -I, care adaugă
directorul specificat în lista directoarelor în
care sunt căutate fişiere-antet cu extensia
.h. Opţiunea -lncurses specifică faptul
că biblioteca ncurses va fi link-editată la
momentul generării executabilului.
Tot cu ajutorul compilatorului GCC,
există posibilitatea creării de biblioteci
partajate (a căror cod nu este inclus în
fişierele executabilele, şi încărcate dinamic
atunci când sunt necesare), printr-o
comandă de genul:
$ gcc -shared -o libtest.so �functii.o test.o
Bibliotecile partajate (în cazul nostru
libtest.so) trebuie instalate în genere în
directorul /usr/lib, apoi trebuie apelată
comanda ldconfig pentru a actualiza baza
de date de biblioteci.
Depanarea programelor cu GDBGDB poate fi utilizat pentru depanarea
programelor scrise în C şi C++. Acesta
poate opri din execuţie un program
în momentul îintâlnirii unei condiţii
specificate de programator, examina
conţinutul variabilelor la momentul
respectiv, şi chiar modifica valoarea
acestora şi continua execuţia programului.
Mai mult decât atât, GDB poate fi folosit
şi pentru a depana programe care sunt
executate pe maşini aflate la distanţă.
Pentru ca un program să poată fi
depanat, acesta trebuie să fie compilat
cu opţiunea -g. Pentru a lansa în execuţie
GDB, vom proceda ca mai jos:
gdb exemplu
care va permite depanarea programului
specificat. GDB are o interfaţă de tip
shell, care necesită apelarea unor comenzi
interne. Părăsirea acestui interpretor
de comenzi se va face prin intermediul
comenzii quit. Lansarea în execuţie a
programului se face prin comanda run.
În cadrul GDB, un program poate
fi oprit datorită unui semnal, unui
punct de oprire sau la solicitarea
programatorului.
Punctele de oprire (breakpoints)
pot fi definite cu ajutorul comenzii
break, furnizându-i ca parametru
fie numărul liniei de program, fie
numele funcţiei la a cărei execuţie
programul va fi oprit. Un punct de
verificare (watchpoints) determină
oprirea programului atunci când
se modifică valoarea unei expresii.
Pentru a şterge aceste puncte de
oprire sau verificare se utilizează
comanda clear.Figura 1: Programul KDevelop.
086-087_programatori.indd 86086-087_programatori.indd 86 23/12/2004 21:07:1723/12/2004 21:07:17
LINUX USERPagina începătorului
87www.linux-magazin.ro Octombrie 2004
Execuţia programului poate fi
continuată cu ajutorul comenzii
continue. Comanda step va
continua execuţia programului
până la următoarea linie de cod.
Comanda next este similară cu
step, însă apelurile de funcţii nu vor
fi tratate recursiv.
Inspectarea variabilelor se face
prin intermediul comenzii print,
având ca parametru expresia ce va
fi afişată.
Automatizarea compilării cu makeUtilitarul make se foloseşte în
principal pentru a întreţine un
set de fişiere cu interdependenţe, care
fac parte dintr-un proiect. Acest program
serveşte aşadar la automatizarea compilării
aplicaţiilor complexe. Majoritatea
programelor distribuite în format-sursă din
Linux folosesc acest utilitar. Nu vom intra
aici în detalii, dat fiind natura complexă a
acestui program.
Sistemul constă în crearea unui fişier
makefile, conţinând scopuri (target-uri),
comenzi shell, macrouri şi directive.
Prezentăm mai jos un exemplu:
# fisierul principalSRC = main
# operatiunile complete � (se apeleaza make)all: tex ps
# compilare fisier tex (make text)tex: $(SRC).tex latex $(SRC).tex
# generare PostScript (make ps)ps: dvips $(SRC).dvi -o $(SRC).ps
Compilarea aplicaţiilor complexeProgramele autoconf, automake şi libtool
sunt utile pentru a simplifica compilarea
aplicaţiilor complexe pe diferite platforme
şi pentru a creşte gradul de portabilitate a
acestora.
Autoconf uşurează portarea programelor
pe diferite platforme prin determinarea
caracteristicilor sistemului pe care se face
compilarea înainte ca aceasta să înceapă.
Codul sursă se poate adapta astfel mai uşor
la diferenţele existente între platforme.
Automake este un instrument care
generează în mod automat fişiere makefile,
simplificând mult munca de realizare a
acestora. El oferă de asemenea diverse
funcţii utile precum determinarea
automată a dependenţelor dintre fişiere.
Libtool este o interfaţă pentru compilator
şi link-editor care permite generarea
uşoară a bibliotecilor, fie ele statice sau
dinamice, independent de platformă.
Aceste trei instrumente sunt programe
distincte, însă între ele există o legătură
strânsă.
Evidenţierea modificărilor din programeUtilitarul diff determină diferenţele dintre
două fişiere text. Acest program este util
pentru a evidenţia modificările aduse unui
program-sursă cu ocazia unei versiuni
mai noi, sau cele efectuate de diferiţi
programatori.
Pentru a “aplica” setul de diferenţe
determinat cu ajutorului lui diff, unui fişier
“origine” în vederea generării fişierului
modificat, se utilizează utilitarul patch.
Controlul versiunilorCVS (Concurrent Versioning System) este un
sistem de control al versiunii, care permite
păstrarea tuturor versiunilor unor fişiere
(în general cod-sursă) şi realizarea unui
jurnal cu modificările efectuate de diferiţi
utilizatori. Acest sistem permite ca un grup
de persoane (echipă) să lucreze la un grup de
fişiere (proiect) comun.
Sistemul constă dintr-un depozit
(repository), stocat pe un server, care conţine
cea mai recentă versiune a grupului de fişiere.
Utilizatorii se pot conecta în orice moment la
acest depozit şi pot prelua fişierele pe care
le conţine, sau îşi pot actualiza o versiune
mai veche, existentă pe discul
local. Fiecare utilizator efectuează
modificări asupra fişierelor şi, în
momentul în care doreşte, trimite
modificările către depozit.
Medii integrate de dezvoltareAstfel, unul dintre cele mai flexibile
medii integrate este KDevelop.
Mediul KDevelop pune la
dispoziţie diverşi “vrăjitori”
(wizards) care permit generarea
automată a scheletului unei aplicaţii
software (al proiectului) – structura
de directoare a acestuia, fişierele de
configurare autoconf şi automake
etc. –, în funcţie de interfaţa proiectului
(grafică, folosind KDE, sau terminal,
adoptându-se o interfaţă text) şi a limbajului
în care acesta este implementat (C ori
C++). De asemenea, codul corespunzător
interfaţei grafice a programului poate fi
generat în mod automat cu ajutorul unui
“vrăjitor” vizual de editare.
Pe lângă mediul de dezvoltare prezentat
anterior, mai putem recurge la aplicaţii
precum:
DDD (Data Display Debugger) este
un aşa-zis depanator vizual, altfel spus o
interfaţă grafică intuitivă pentru programul
de depanare gdb.
Glade este un program pentru crearea
de interfeţe-utilizator grafice folosind
bibliotecile GNOME. Glade permite
realizarea rapidă a acestor interfeţe şi
generarea codului C corespunzător. Poate
fi un instrument rapid pentru realizarea
de interfeţe grafice pentru managerul de
ferestre GNOME.
Qt Designer reprezintă o aplicaţie destinată
creării de interfeţe grafice complexe, utilizând
biblioteca Qt folosită de KDE. ■
Figura 2. Mediul de programare Qt Designer
Dragoş Acostăchioaie este programator
de sistem şi aplicaţii Linux, administrator
de reţea, putând fi contactat la adresa
RUL
[1] Acostăchioaie, D.; Buraga, S., Utilizare Linux. Noţiuni de bază şi practică, Polirom, Iaşi, 2004: http://www.adt.ro/linux/
[2] Acostăchioaie, D., Programare C şi
C++ pentru Linux, Polirom, Iaşi, 2002: http://www.adt.ro/prg/
INFO
086-087_programatori.indd 87086-087_programatori.indd 87 23/12/2004 21:07:2023/12/2004 21:07:20