1 votes

Création d'une bibliothèque dynamique, est-ce le bon chemin ?

J'essaie d'apprendre à créer des bibliothèques statiques et dynamiques, et j'ai un peu de mal à comprendre mon professeur en ce qui concerne les bibliothèques. Mon idée pour créer une bibliothèque dynamique est la suivante :

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

Maintenant, mon professeur dit que l'avant-dernière ligne doit ressembler à ceci :

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

Quelqu'un peut-il m'expliquer la différence exacte entre les deux ? Merci de votre compréhension.

1voto

James Mertz Points 390

-l<name> n'est qu'un raccourci pour dire "cherchez lib<name>.so o lib<name>.a dans les chemins d'accès aux bibliothèques configurés", et -L. ajoute simplement le répertoire actuel à ce chemin.

Bien sûr, -l est préférable lors de l'utilisation de vraies bibliothèques, car il n'est pas nécessaire de connaître le chemin complet de la bibliothèque ni les divers détails du système d'exploitation (comme .so vs .dylib vs .a vs .dll ), mais il ne devrait pas y avoir de différence lorsque l'exécutable est édité.

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

Voir le ld pour une description plus détaillée des deux -l y -L .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X