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

89

gccet ldoffrent de nombreuses façons de spécifier un chemin de recherche pour les bibliothèques, parmi lesquelles les indicateurs -rpathet -L. Les pages de manuel ne révèlent aucune différence entre ces deux indicateurs, indiquant en fait 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?

Craig M. Brandenburg
la source
2
Vous pensez peut-être -rpath-link?
ams

Réponses:

106

Vous devez lire des copies obsolètes des pages de manuel (emphase ajoutée):

-rpath = dir
      Ajoute un répertoire au chemin de recherche de la bibliothèque d' exécution . Ceci est utilisé
      lors de la liaison d'un exécutable ELF avec des objets partagés. Tous les
      arguments -rpath sont concaténés et transmis à l' éditeur de liens d' exécution , qui les
      utilise pour localiser les objets partagés au moment de l' exécution.

contre.

-L searchdir
--library-path = searchdir
      Ajoute le chemin searchdir à la liste des chemins dans lesquels ld recherchera
      les bibliothèques d'archives et les scripts de contrôle ld.

Ainsi, -Lindique ldoù chercher les bibliothèques à lier lors de la liaison. Vous utilisez ceci (par exemple) lorsque vous construisez sur des bibliothèques dans votre arborescence de construction, qui seront placées dans les chemins normaux des bibliothèques système 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 la bibliothèque système.

derobert
la source
16
Remarques: 1. La plupart du temps, quand on a besoin -rpath=/some/weird/path, on a besoin -L /some/weird/pathaussi. 2. Avec gccun besoin d'utilisation -Wl,-rpath=dir.
n. «pronoms» m.
4
Je ne comprends toujours pas pourquoi les deux sont nécessaires. J'ai la même expérience que nm ci-dessus. De quelles informations la bibliothèque a-t-elle besoin au moment de la construction? En dehors des éventuels fichiers h, de cause. Mais c'est une autre chose que je suppose ...
Fredrik Johansson
1
@FredrikJohansson Ce serait un sujet raisonnable pour une nouvelle question (en supposant qu'elle n'a pas déjà été posée, bien sûr). Les symboles disponibles sont nécessaires, au moins, mais il y a probablement d'autres choses.
derobert
4
Question de suivi ajoutée à: stackoverflow.com/questions/28096133/…
Fredrik Johansson