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