Création de Bibliothèques
Transcription
Création de Bibliothèques
Bibliothèques Types de fichiers binaires sous Unix : les fichiers relogeables (.o pour object) les fichiers exécutables exécutable = fichier(s) objet(s) + édition de liens 2 types d’édition de liens : statique dynamique object) bibliothèque d’archive (.a pour archive) bibliothèque partagée (.so pour shared . – p.1/10 Bibliothèques d’archives Convention : libnom_archive.a Édition de liens statique ensemble de fichiers .o archiveur ar gros fichier exécutable unique .a .a utilisable par l’éditeur de liens ld avec compilateur cc et option -dn ou avec compilateur gcc et option -static . – p.2/10 Exemple de Bibliothèques d’archives Création des objets gcc gcc gcc gcc -c -c -c -c add.c -o add.o mult.c -o mult.o subs.c -o subs.o print.c -o print.o Création bibliothèque statique ar r libcomplexe.a add.o mult.o subs.o file libcomplexe.a libcomplexe.a: current ar archive, n’est pas un exécutable dynamique ni un objet partagé . – p.3/10 Exemple de Bibliothèques d’archives Utilisation bibliothèque statique gcc -static complexe.c -lcomplexe -o complexe_stat Taille de l’exécutable ls -l complexe_stat ... 342440 ... complexe_stat* . – p.4/10 Bibliothèques partagées Convention : libnom_archive.so Édition de liens dynamique ensemble de fichiers .o compilateur cc ou gcc avec option -G mise à jourLD_LIBRARY_PATH petit fichier exécutable .so .so utilisable par l’éditeur de liens ldd . – p.5/10 Exemple de Bibliothèques partagée Création des objets Création bibliothèque partagée gcc -G -o libcomplexe.so add.o mult.o subs.o print.o file libcomplexe.so libcomplexe.so:ELF 32 bits MSB bibliothèque dynamique avec liens dynamiques,fichier intégral Mise à jour liste des chemins pour trouver les bibliothèques setenv LD_LIBRARY_PATH <....anciens chemins....>: + <chemin de libcomplexe.so> . – p.6/10 Exemple de Bibliothèques partagée Utilisation bibliothèque partagée gcc complexe.c -lcomplexe -o complexe_dyn Taille de l’exécutable ls -l complexe_dyn ... 7256 ... complexe_dyn* . – p.7/10 Utilisation d’une fonction Erreurs Bibliothèques partagée bibliothèque gcc -G -o libcomplexe2.so mult.o subs.o print.o gcc -I. -L. complexe.c -lcomplexe2 -o complexe_dyn2 non défini premier référencé symbole dans le fichier add /var/tmp//ccaGCgG0.o ld: fatal : Erreurs de référence aux symboles. Aucun résultat écrit dans complexe_dyn2 . – p.8/10 Erreurs Bibliothèques partagée Mise à jour de la bibliothèque après le lien gcc -G -o libcomplexe.so add.o mult.o subs.o print.o gcc -I. -L. complexe.c -lcomplexe -o complexe_dyn gcc -G -o libcomplexe.so mult.o subs.o print.o complexe_dyn x = { 12.35 , 1.20} y = {-25.00 , 13.90} x * y = {-325.43 , 141.66} ld.so.1: complexe_dyn: fatal : erreur de réadressage:fichier complexe_dyn: symbole add: symbole référencé introuvable . – p.9/10 Erreurs Bibliothèques partagée Prévention avec ldd; ldd -r complexe_dyn libcomplexe.so => <chemin de libcomplexe.so> libc.so.1 => /usr/lib/libc.so.1 libdl.so.1 => /usr/lib/libdl.so.1 /usr/platform/SUNW,Sun-Fire-280R/lib/libc_psr.so.1 symbole introuvable : add (complexe_dyn) . – p.10/10