Creazione di una libreria dinamica, è questo il percorso corretto?


1

Sto cercando di imparare a creare librerie statiche e dinamiche e sto riscontrando un po 'di problemi nel comprendere il mio insegnante per quanto riguarda le biblioteche. La mia idea di creare una libreria dinamica è questa:

gcc -c main.c -o main.o
gcc -c -fPIC func.c -o func.o
gcc -shared -Wl,-soname,-libfunc.so.1 -o libfunc.so.1.0.1 func.o
ldconfig -n .
ln -sf libfunc.so.1.0.1 libfunc.so
gcc main.o libfunc.so.1.0.1 -o prog1
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

Ora il mio insegnante dice che la linea precedente deve apparire così:

gcc main.o -o prog1 -L. -lfunc

Qualcuno può spiegarmi l'esatta differenza tra quei due? Grazie!

Risposte:


1

-l<name>è solo una scorciatoia che dice "cerca lib<name>.soo lib<name>.anei percorsi di libreria configurati" e -L.aggiunge semplicemente la directory corrente a detto percorso.

Naturalmente, -lè preferito quando si utilizzano librerie reali, poiché elimina la necessità di conoscere il percorso completo della libreria né i vari dettagli del sistema operativo (come .sovs .dylibvs .avs .dll), ma non dovrebbe esserci alcuna differenza quando viene eseguito il file eseguibile.

$ gcc -o out1 main.c libtest.so
$ gcc -o out2 main.c -L. -ltest
$ md5sum out*
b1b8f46bf6091377b202df90d6bd32cc  out1
b1b8f46bf6091377b202df90d6bd32cc  out2

Vedere la ldpagina del manuale per una descrizione più lunga di entrambi -le -L.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.