В чем разница между -rpath и -L?

89

gccи ldпредоставляет множество способов , чтобы указать путь поиска для библиотек-среди них -rpathи -Lфлагов. На страницах руководства нет различий между этими двумя флагами, фактически говоря, что каждый флаг добавляет библиотеку в путь поиска библиотеки. Тем не менее, кажется странным , что оба флаг делает точно то же самое. Каковы различия между этими двумя вариантами?

Крейг М. Бранденбург
источник
2
Может ты о чем думаешь -rpath-link?
AMS,

Ответы:

106

Вы, должно быть, читаете устаревшие копии страниц руководства (курсив мой):

-rpath = dir
      Добавить каталог к пути поиска библиотеки времени выполнения . Это используется
      при связывании исполняемого файла ELF с общими объектами. Все
      аргументы -rpath объединяются и передаются компоновщику среды выполнения , который
      использует их для поиска общих объектов во время выполнения.

vs.

-L searchdir
--library-path = searchdir
      Добавить путь searchdir в список путей, по которым ld будет искать
      архивные библиотеки и сценарии управления ld.

Итак, -Lсообщает, ldгде искать библиотеки для связывания при компоновке. Вы используете это (например), когда строите против библиотек в своем дереве сборки, которые будут помещены в обычные пути системных библиотек с помощью make install. --rpath, с другой стороны, сохраняет этот путь внутри исполняемого файла, чтобы динамический компоновщик среды выполнения мог найти библиотеки. Вы используете это, когда ваши библиотеки находятся за пределами пути поиска системной библиотеки.

Derobert
источник
16
Примечания: 1. В большинстве случаев, когда нужно -rpath=/some/weird/path, нужно и нужно -L /some/weird/path. 2. С gccодной нужды использовать -Wl,-rpath=dir.
п. 'местоимения' м.
4
Я до сих пор не понимаю, зачем нужны оба. У меня такой же опыт, как у nm выше. Какая информация требуется от библиотеки во время сборки? Помимо возможных h-файлов, конечно. Но это другое дело, я думаю ...
Фредрик Йоханссон
1
@FredrikJohansson Это будет разумная тема для нового вопроса (если, конечно, его еще не задавали). По крайней мере, имеющиеся символы нужны, но, наверное, есть и другие вещи.
derobert
4
Дополнительный вопрос добавлен по адресу: stackoverflow.com/questions/28096133/…
Фредрик Йоханссон