Programarea

Post on 02-Jan-2017

215 views 1 download

transcript

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

dragos@adt.roAUTO

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