Il est possible que plusieurs instances de la bibliothèque existent dans le chemin de recherche lors de la compilation. Dans quel ordre les liens de traitement de liens seront-ils inclus dans le chemin de recherche? La plate-forme en question est Sun OS.Dans quel ordre l'éditeur de liens traite-t-il les répertoires de la bibliothèque?
Répondre
Les répertoires sont recherchés dans l'ordre dans lequel ils sont spécifiés sur la ligne de commande. Les répertoires spécifiés sur la ligne de commande sont recherchés avant les répertoires par défaut. Toutes les options -L s'appliquent à toutes les options -l, indépendamment de l'ordre dans lequel les options apparaissent. LD_LIBRARY_PATH peut également être utilisé pour compléter le chemin de recherche de la bibliothèque. La recherche dans le répertoire s'arrête sur le premier répertoire contenant la bibliothèque correspondante.
LD_LIBRARY_PATH est délicate si:
LD_LIBRARY_PATH
Une liste des répertoires dans lesquels rechercher des bibliothèques spécifiées avec l'option -l. Plusieurs répertoires sont séparés par deux points. Dans la plupart cas général, il contiendra deux listes de répertoires séparés par un point-virgule :
dirlist1; dirlist2
Si ld est appelé avec un nombre quelconque d'occurrences de -L, comme dans:
ld . . . -Lpath1 . . . -Lpathn . . .
alors la commande de chemin de recherche est:
dirlist1 path1 . . . pathn dirlist2 LIBPATH
Lorsque la liste des répertoires ne contient pas un point-virgule, il est interprété comme dirlist2. LD_LIBRARY_PATH est également utilisé pour spécifier les répertoires de recherche de bibliothèque sur l'éditeur de liens d'exécution. Autrement dit, si LD_LIBRARY_PATH existe dans l'environnement , l'éditeur de liens d'exécution sera recherche les répertoires nommés, le avant son répertoire par défaut, pour objets partagés à être liés au programme à exécution.
Veuillez en lire plus à ce sujet here.
Juste pour confirmer, est-ce vrai que LD_LIBRARY_PATH est considéré après toutes les options -L? – Leonid
Non, pas vraiment. Cela dépend si elle contient un point-virgule ou non. Si ce n'est pas le cas, alors il va après tout -L, sinon la liste avant le point-virgule passe en premier, puis toutes les options -L, puis la liste après un point-virgule. Je vais mettre à jour ma réponse, car il est difficile de trouver cela dans ce gros document. Notez également que cela s'applique à Sun Linker, pas à celui de GNU. Je ne suis pas sûr de celui que vous utilisez. –