Bonjour à tous, je travaille en ce moment sur une application en C comprenant 2 bibliothèques, Mère et Fille. J'ai du mal à comprendre comment les compilations et les éditions de liens sont faites, pouvez-vous m'aider ?
On compile la Mère en dynamique : le but est d'obtenir Mère.so. Lors de l'édition de liens de Mère, on inclut Fille en statique, donc Fille.a (une archive).
J'étais donc parti pour compiler les sources de la Fille avec (grosso modo)
> gcc -c fille*.c -o fille*.o
> ar rv Fille.a fille*.o
Puis inclure Fille.a lors de l'édition de liens de la Mère :
> ld -shared mere*.o Fille.a -o Mere.so
Ce à quoi on m'a rétorqué : "Non non, c'est une compilation dynamique, donc on 'archive' bien les fille*.o 'dans' Fille.a, mais la compilation des sources se fait avec le flag -shared :
> gcc -shared -c fille*.c -o fille*.o
> ar rv Fille.a fille*.o (cette commande ne change pas)
"
Moi j'ai du mal à comprendre le truc... je pensais qu'on produisait une archive pour "faire" du statique, et un shared object pour "faire" du dynamique, mais mes notions ne sont pas très claires. Ensuite, il faut lors de l'éxecution mettre l'emplacement des .so dans le LD_LIBRARY_PATH, alors que c'est inutile pour l'archive.
Or là je vois que dans mon projet, on utilise l'archive "hybride" (qui contient des objets compilés en -shared) comme une archive "classique", rien de la Fille n'est inclus dans le LD_LIBRARY_PATH, on n'y trouve que le chemin vers Mere.so.
Quelqu'un pourra t-il m'éclairer ? Merci.
Partager