[so] Problema compilare

Razvan Deaconescu razvand at cs.pub.ro
Thu Nov 30 17:31:00 EET 2006


Razvan Gherghina wrote:

> Salut.

Salut!

> Am si eu o problema. Daca denumesc libraria LibMonitor.so, la
> compilare imi da o eroare de genul "undefined reference  to "nume
> functie din librarie".

Se spune biblioteca, nu librarie :-).

> Daca denumesc libraria cu l in loc de L
> (libMonitor.so) programul imi merge fara probleme. Care ar putea fi
> cauza si eventual daca se poate da un exemplu de compilare program.

Bibliotecile trebuiesc denumite in formatul:
lib + nume_biblioteca + .a (biblioteci cu legare statica)
lib + nume_biblioteca + .so (biblioteci partajate)

totul este CASE SENSITIVE

exemple:

libmylib.so
libyourlib.a
libsimple.a
libmonitor.so

legarea se face folosind optiunile -L (pentru precizarea directorului in 
care rezida biblioteca) si -l pentru legarea bibliotecii

exemplu:
    gcc -o myexec myfile1.o myfile2.o -L. -lmonitor

optiunea -l este urmata de *numele bibliotecii* nu de numele fisierului 
ce o contine; ATENTIE! denumirea fisierului ce contine o biblioteca 
trebuie sa inceapa neaparat cu lib!

pentru exemplele de mai sus asta inseamna
-lmylib
-lyourlib
-lsimple
-lmonitor

daca avem un fisier in care rezida o biblioteca denumit liblib.so
legarea se va face cu -llib

nu putem sa avem un fisier in care rezida biblioteca care sa inceapa cu 
ceva diferit de lib

mai multe detalii la The Linux Documentation Project
http://tldp.org/HOWTO/Program-Library-HOWTO/index.html

de asemenea in pagina de manual a gcc sau ld gasesti informatii despre 
cum folosesti optinunile -l si -L

ca si completare, pentru bibliotecile statice poti evita folosirea 
prefixului lib dar faci legarea fara optiunea -l
de exemplu:
    gcc -o myexec myfile1.o myfile2.o -L. mystaticlib.a

Razvan


More information about the so mailing list