web-dev-qa-db-fra.com

Quelle est la différence entre -rpath et -L?

gcc et ld offrent de nombreuses façons de spécifier un chemin de recherche pour les bibliothèques, parmi lesquelles -rpath et -L drapeaux. Les pages de manuel ne révèlent aucune différence entre ces deux indicateurs, indiquant effectivement que chaque indicateur ajoute une bibliothèque au chemin de recherche de la bibliothèque. Pourtant, il semble étrange que les deux drapeaux fassent exactement la même chose. Quelles sont les différences, le cas échéant, entre ces deux options?

74

Vous devez lire des copies obsolètes des pages de manuel (non souligné dans l'original):

-rpath = dir
Ajoutez un répertoire au chemin de recherche de la bibliothèque runtime. Ceci est utilisé
Lors de la liaison d'un exécutable ELF avec des objets partagés. Tout -rpath
Les arguments Sont concaténés et passés à l'éditeur de liens runtime, qui
Les utilise pour localiser les objets partagés à runtime.

vs.

-L searchdir
- library-path = searchdir
Ajoutez chemin searchdir à la liste des chemins que ld recherchera
Bibliothèques d'archives et scripts de contrôle ld.

Alors, -L indique à ld où chercher les bibliothèques à lier lors de la liaison. Vous l'utilisez (par exemple) lorsque vous construisez avec des bibliothèques dans votre arborescence de construction, qui seront placées dans les chemins de bibliothèque système normaux par make install. --rpath, d'autre part, stocke ce chemin à l'intérieur de l'exécutable, afin que l'éditeur de liens dynamique d'exécution puisse trouver les bibliothèques. Vous l'utilisez lorsque vos bibliothèques se trouvent en dehors du chemin de recherche de bibliothèque système.

88
derobert