Forum Programmation.c++ probleme avec l'edition de lien

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
17
déc.
2018

Bonjour à tous,

Je suis tombé dans un projet d'école avec un répertoire libCalcul ou se trouvait :
libCalcul.so -> libCalcul.so.1.0.0
libCalcul.so.1 -> libCalcul.so.1.0.0
libCalcul.so.1.0 -> libCalcul.so.1.0.0
libCalcul.so.1.0.0

avec les fleches représentant des liens symboliques. Je n'ai rien compris a tous ces liens symboliques. Lors de l'édition de lien la lib libCalcul.so.1.0.0 est la seul qui compte, avec la commande g++ programme.cpp -L:/home/ -lCalcul.so.1.0.0 -o progFinale et ca devrait marcher alors pourquoi créer tous ces liens symboliques?

Ensuite ma seconde question :
une fois que j'ai compilé mon code, si je met l'exécutable progFinale sur une autre machine Linux et que je place sur cet autre machine la lib libCalcul.so.1.0.0 dans le répertoire /home, il n'y aura pas de probleme car l'exécutable progFinale au lancement du programme va faire l'édition de lien et va chercher dans le répertoire /home la lib, donc le programme devrait se lancer sans aucun soucis ?

Merci d'avance pour vos réponses

  • # Liens

    Posté par  (Mastodon) . Évalué à 5. Dernière modification le 17 décembre 2018 à 20:37.

    Voici les significations de ces liens (dans l'ordre):

    • si un programme a besoin de "libCalcul.so", on va lui donner le fichier "libCalcul.so.1.0.0"
    • si un programme a besoin de "libCalcul.so.1", on va lui donner le fichier "libCalcul.so.1.0.0"
    • si un programme a besoin de "libCalcul.so.1.0", on va lui donner le fichier "libCalcul.so.1.0.0"

    Donc toi, programmeur, il faudrait que tu saches ce dont tu as besoin.

    • j'ai aucune idée => tu lies avec libCalcul.so et n'importe quelle version fera l'affaire
    • il me faut absolument la version 1, parce que je sais que je suis incompatible avec la version 2 => tu lies avec libCalcul.so.1
    • il me faut absolument la version 1.0, parce que je sais que je suis incompatible avec la version 1.1 => tu lies avec libCalcul.so.1.0
    • il me faut absolument la version 1.0.0, parce que je sais que je suis incompatible avec la version 1.0.1 => tu lies avec libCalcul.so.1.0.0

    Sans trop savoir ce que fait cette lib, je lierais avec "libCalcul.so.1" pour laisser une chance à des mises à jours de ne pas tout casser.

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

  • # Résolution de liens à l'exécution

    Posté par  (site web personnel) . Évalué à 5.

    Hello,

    Alors c'est normalement juste -lCalcul à passer, ce qui devrait faire le nécessaire.

    Maintenant, concernant la portabilité, il y a une dépendance qui va avoir été encodée dans le binaire ELF ainsi généré. Tu peux les consulter avec objdump -x ton-binaire|grep NEEDED.

    À l'exécution, un certain nombre de chemins vont être essayés, en fonction de la configuration du dynamic linker (ld.so), cf. /etc/ld.so.conf et assimilés (/etc/ld.so.conf.d/*).

    Si tu veux ajouter un chemin vers des bibliothèques ELF (par exemple un chemin dans /home), tu peux positionner la variable LD_LIBRARY_PATH à un ou plusieurs chemins (de préférence absolus, séparés par le caractère : comme d'habitude avec PATH) pour compléter la configuration système.

    Debian Consultant @ DEBAMAX

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.