On Wednesday 24 September 2008 18:37:05 jean-luc malet wrote:
> 2008/9/24 Benoit Peccatte <[EMAIL PROTECTED]>
> > Hé non car comme tu l'as dit plus haut, un .a n'est qu'une collection
> > d'objets
> > donc ça n'a pas le même format.
>
> un format est un format... franchement lorsque le linker va ouvrir un .a
> (qui est une archive ar, donc pas loin d'un vulgaire zip) et rechercher
> dans la collection d'objets (elf qui plus est!) lequel correspond à l'appel
> de fonction, et lorsqu'il va ouvrir un elf qui est un jeu d'objets
> concaténés avec un header qui permet de savoir ce qui manque et où trouver
> quoi afin de faire la résolution des noms au runtime... pour moi c'est
> kiffkiff... pour tirer le résonnement à l'extrême, qu'est qui empêche le
> linker de faire la résolution qui est effectuée au runtime au linktime?
> s'il est capable de le faire au moment où cela doit s'executer, c'est alors
> faisable avant l'execution.... le conteneur change pas le contenu....
Si le contenu change car il est lui même lié statiquement. De plus il est en
général stripé, c'est à dire qu'un certain nombre de symboles ont disparu.
> > Sinon, tu obtiendra un bien meilleur résultat en disant au compilateur
> > (et pas
> > seulement au linker) que tu fais un exécutable statique, remplace
> > -Wl,--static
> > par --static.
>
> cela je ne le pense pas, car le compilateur n'en a rien à cirer avant le
> linktime du static. les objets créés sont tous relogeables et contiennent
> tous les symboles nécessaires à la résolution de nom (sinon aucun linkage
> avec aucune librairie voir aucun des objets généré n'est possible). Celui
> qui est en charge de mette tout ensemble c'est le linker, et pas le
> compilateur qui va générer les objets, le compilateur doit donc fournir des
> objets qui marchent quelque soit le linker utilisé après, à l'extrême on
> peu générer l'ensemble des .o (sans le --static) et après les lier avec ld
> --static et cela marche sans aucun pb, sauf qu'il semblerait que ld avec
> l'option --static n'ira chercher que les .a et vu que j'ai une lib
> uniquement en .so et pas en .a.....
Homme de peu de foi, tu n'as même pas essayé. C'est le compilateur qui appelle
le linker et c'est lui qui choisit les paramètres à lui passer (comme
parexemple d'utiliser la libc que tu ne demande pas). Le fait de lui passer -
static va entre autre lui dire de ne pas charger les bibliothèques qui ne
fonctionnent qu'avec du chargement dynamique comme c'est le cas pour
libgcc_s.so justement.
Après rien ne t'empêche d'appeler toi-même le linker avec tous les paramètres
pour mieux en maitriser le processus.
> > > je ne trouve nul pas les options à donner pour que le linker fasse le
> > > linkage avec la lib dynamique mais non pas au runtime (comportement
> > > d'une lib dynamique) mais au linktime... en gros qu'il fasse ce qu'il
> > > fait avec une librarie static ".a" mais avec une librarie dynamique
> > > ".so"
> >
> > Je ne saisis pas l'intérêt, il te faut simplement le .a lequel se trouve
> > en général dans le paquet -dev correspondant à la bibliothèque dynamique.
> > Le .a
> > sera alors intégralement dans l'exécutable et tu n'en auras plus besoin
> > ensuite.
>
> question... tu fais quoi lorsque le "vendeur" de la librairie ne fournis
> qu'un .so? de même si tu fais beaucoup de dev (ce qui est mon cas) tu te
S'il ne te fournit qu'un .so c'est qu'il ne t'as pas fourni un kit de
développemnt complet et c'est son choix, et c'est toi qui l'a choisi.
> retrouves avec une pallanquée de .a qui sont en duplicata avec les .so...
> c'est de la perte de place alors que techniquement parlant faire la
> résolution de symboles en avance de phase (ie à la compilation et pas au
> run time) est tout à fait faisable (on peut même faire la résolution
> dynamique avant pour accélérer le charchement des exécutables)
Oui oui, l'outil prelink qui fait ça est connu pour accélérer le chargement de
openoffice.
Diffusez cette liste aupres de vos relations :)
Linux Azur : http://linux-azur.org
L'auteur du post est responsable de ses �crits !
*** Pas de message SMS, HTML ni de PJ SVP ***