Какая разница между -rpath и -L?

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

Ответ 1

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

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

против.

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

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